diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2017-07-15 08:38:29 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2017-07-18 03:34:24 +0900 |
commit | 26ba655f36c20315390497a0963c23014cadeb91 (patch) | |
tree | 1cefae3a645371b9e17eeabe09af1506c2c48ed6 | |
parent | 8acca896cbaa01f6fc51969601888a440e83d53a (diff) | |
download | rails-26ba655f36c20315390497a0963c23014cadeb91.tar.gz rails-26ba655f36c20315390497a0963c23014cadeb91.tar.bz2 rails-26ba655f36c20315390497a0963c23014cadeb91.zip |
Fix `where` with a custom table
Without this fix, SELECT clause doesn't use a custom table alias name:
```
% ARCONN=sqlite3 be ruby -w -Itest test/cases/relations_test.rb -n test_using_a_custom_table_affects_the_wheres
Using sqlite3
Run options: -n test_using_a_custom_table_affects_the_wheres --seed 31818
E
Error:
RelationTest#test_using_a_custom_table_affects_the_wheres:
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: posts: SELECT "posts".* FROM "posts" "omg_posts" WHERE "omg_posts"."title" = ? LIMIT ?
```
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 8 |
2 files changed, 5 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 8c2d546aff..c26c176c7b 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -1048,7 +1048,7 @@ module ActiveRecord if select_values.any? arel.project(*arel_columns(select_values.uniq)) else - arel.project(@klass.arel_table[Arel.star]) + arel.project(table[Arel.star]) end end diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 6c35940c2e..ca15c95432 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -1915,11 +1915,11 @@ class RelationTest < ActiveRecord::TestCase table_metadata = ActiveRecord::TableMetadata.new(Post, table_alias) predicate_builder = ActiveRecord::PredicateBuilder.new(table_metadata) - relation = ActiveRecord::Relation.new(Post, table_alias, predicate_builder) - relation.where!(foo: "bar") + relation = ActiveRecord::Relation.create(Post, table_alias, predicate_builder) - node = relation.arel.constraints.first.grep(Arel::Attributes::Attribute).first - assert_equal table_alias, node.relation + post = posts(:welcome) + + assert_equal post, relation.where!(title: post.title).take end test "#load" do |