diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2018-09-28 18:34:24 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-28 18:34:24 +0900 |
commit | f06d89c6043854fdf2cfd81265a5f852e77fa07b (patch) | |
tree | d92fac75bea553e622d6d653461d97273e5d4149 /activerecord | |
parent | 2ab0df00b69335986f1116b7bea17c1ed0f52d9f (diff) | |
parent | d76e3e12800414551ec42e17832227b820402007 (diff) | |
download | rails-f06d89c6043854fdf2cfd81265a5f852e77fa07b.tar.gz rails-f06d89c6043854fdf2cfd81265a5f852e77fa07b.tar.bz2 rails-f06d89c6043854fdf2cfd81265a5f852e77fa07b.zip |
Merge pull request #34013 from bogdan/relation-merge-from
Bugfix ActiveRecord::Relation#merge special case of from clause
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/relation/merger.rb | 9 | ||||
-rw-r--r-- | activerecord/test/cases/relation/merging_test.rb | 4 |
2 files changed, 10 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/relation/merger.rb b/activerecord/lib/active_record/relation/merger.rb index 07b16a0740..4de7465128 100644 --- a/activerecord/lib/active_record/relation/merger.rb +++ b/activerecord/lib/active_record/relation/merger.rb @@ -171,9 +171,7 @@ module ActiveRecord end def merge_clauses - if relation.from_clause.empty? && !other.from_clause.empty? - relation.from_clause = other.from_clause - end + relation.from_clause = other.from_clause if replace_from_clause? where_clause = relation.where_clause.merge(other.where_clause) relation.where_clause = where_clause unless where_clause.empty? @@ -181,6 +179,11 @@ module ActiveRecord having_clause = relation.having_clause.merge(other.having_clause) relation.having_clause = having_clause unless having_clause.empty? end + + def replace_from_clause? + relation.from_clause.empty? && !other.from_clause.empty? && + relation.klass.base_class == other.klass.base_class + end end end end diff --git a/activerecord/test/cases/relation/merging_test.rb b/activerecord/test/cases/relation/merging_test.rb index 6e7998d15a..224e4f39a8 100644 --- a/activerecord/test/cases/relation/merging_test.rb +++ b/activerecord/test/cases/relation/merging_test.rb @@ -122,6 +122,10 @@ class RelationMergingTest < ActiveRecord::TestCase assert_not_empty relation.from_clause end + def test_merging_with_from_clause_on_different_class + assert Comment.joins(:post).merge(Post.from("posts")).first + end + def test_merging_with_order_with_binds relation = Post.all.merge(Post.order([Arel.sql("title LIKE ?"), "%suffix"])) assert_equal ["title LIKE '%suffix'"], relation.order_values |