aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2017-01-03 23:22:47 -0500
committerGitHub <noreply@github.com>2017-01-03 23:22:47 -0500
commita2b4df5b0bc2c1494665e07104cd2d8ceee08878 (patch)
treeb1bfaba39ee039e5757d5843746007eec7819027 /activerecord
parentb9db45bb632853b709c64c736859e9ee347ca4bf (diff)
parentb334aa0ea4008221c475adc5b124f3b23b785aba (diff)
downloadrails-a2b4df5b0bc2c1494665e07104cd2d8ceee08878.tar.gz
rails-a2b4df5b0bc2c1494665e07104cd2d8ceee08878.tar.bz2
rails-a2b4df5b0bc2c1494665e07104cd2d8ceee08878.zip
Merge pull request #27564 from kamipo/fix_find_by_active_record_base_object-2
Fix `find_by` and `where` consistency
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/core.rb6
-rw-r--r--activerecord/test/cases/finder_test.rb5
2 files changed, 8 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb
index 5d0f82130d..6d2361c4ac 100644
--- a/activerecord/lib/active_record/core.rb
+++ b/activerecord/lib/active_record/core.rb
@@ -196,12 +196,12 @@ module ActiveRecord
end
def find_by(*args) # :nodoc:
- return super if scope_attributes? || !(Hash === args.first) || reflect_on_all_aggregations.any?
+ return super if scope_attributes? || reflect_on_all_aggregations.any?
hash = args.first
- return super if hash.values.any? { |v|
- v.nil? || Array === v || Hash === v || Relation === v
+ return super if !(Hash === hash) || hash.values.any? { |v|
+ v.nil? || Array === v || Hash === v || Relation === v || Base === 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 97010b1fd9..e0ad9f5ec1 100644
--- a/activerecord/test/cases/finder_test.rb
+++ b/activerecord/test/cases/finder_test.rb
@@ -339,6 +339,11 @@ class FinderTest < ActiveRecord::TestCase
assert_equal author.post, Post.find_by(author_id: Author.where(id: author))
end
+ def test_find_by_and_where_consistency_with_active_record_instance
+ author = authors(:david)
+ assert_equal Post.where(author_id: author).take, Post.find_by(author_id: author)
+ end
+
def test_take
assert_equal topics(:first), Topic.take
end