diff options
author | Sean Griffin <sean@seantheprogrammer.com> | 2015-10-20 15:25:29 -0600 |
---|---|---|
committer | Sean Griffin <sean@seantheprogrammer.com> | 2015-10-20 15:25:29 -0600 |
commit | 0a6c4019dfebb1c46d8c16c89238a05a6fdc9f1d (patch) | |
tree | 04b08b1a07a11f4db329c82cc2229b8decaafe23 /activerecord | |
parent | 7b92798d2fee012bf683c513fb3864a9143a6f71 (diff) | |
parent | f798cbd2f36ed8a4b825667016d6975b812a5b9f (diff) | |
download | rails-0a6c4019dfebb1c46d8c16c89238a05a6fdc9f1d.tar.gz rails-0a6c4019dfebb1c46d8c16c89238a05a6fdc9f1d.tar.bz2 rails-0a6c4019dfebb1c46d8c16c89238a05a6fdc9f1d.zip |
Merge pull request #20957 from akihiro17/find-by-issue
Fix find_by with association subquery issue
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/core.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/finder_test.rb | 6 |
3 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index ed861dc4d6..0c3c21202f 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,9 @@ +* Don't cache arguments in #find_by if they are an ActiveRecord::Relation + + Fixes #20817 + + *Hiroaki Izu* + * Qualify column name inserted by `group` in calculation Giving `group` an unqualified column name now works, even if the relation diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb index db3e9d1d52..142b6e8599 100644 --- a/activerecord/lib/active_record/core.rb +++ b/activerecord/lib/active_record/core.rb @@ -177,7 +177,7 @@ module ActiveRecord hash = args.first return super if hash.values.any? { |v| - v.nil? || Array === v || Hash === v + v.nil? || Array === v || Hash === v || Relation === v } # We can't cache Post.find_by(author: david) ...yet diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index 307b68764e..6686ce012d 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -265,6 +265,12 @@ class FinderTest < ActiveRecord::TestCase assert_equal [Account], accounts.collect(&:class).uniq end + def test_find_by_association_subquery + author = authors(:david) + assert_equal author.post, Post.find_by(author: Author.where(id: author)) + assert_equal author.post, Post.find_by(author_id: Author.where(id: author)) + end + def test_take assert_equal topics(:first), Topic.take end |