aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/collection_association.rb
diff options
context:
space:
mode:
authorwangjohn <wangjohn@mit.edu>2013-03-19 16:33:49 -0400
committerwangjohn <wangjohn@mit.edu>2013-03-19 16:33:49 -0400
commit840ca09a1151fafe1cb3299f12437378d25f2ce5 (patch)
tree95b740f525c3303b5b5938f4dd58dffdd8fa05fa /activerecord/lib/active_record/associations/collection_association.rb
parenta6c5ee3032c50720760f7a4c895206b4205836c0 (diff)
downloadrails-840ca09a1151fafe1cb3299f12437378d25f2ce5.tar.gz
rails-840ca09a1151fafe1cb3299f12437378d25f2ce5.tar.bz2
rails-840ca09a1151fafe1cb3299f12437378d25f2ce5.zip
Calling find() on an association with an inverse will now check to see
if the association already holds that record in memory before checking the database for the specified ids.
Diffstat (limited to 'activerecord/lib/active_record/associations/collection_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/collection_association.rb5
1 files changed, 3 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb
index 906560bd44..73b4a187c8 100644
--- a/activerecord/lib/active_record/associations/collection_association.rb
+++ b/activerecord/lib/active_record/associations/collection_association.rb
@@ -79,7 +79,7 @@ module ActiveRecord
if block_given?
load_target.find(*args) { |*block_args| yield(*block_args) }
else
- if options[:finder_sql]
+ if options[:finder_sql] || options[:inverse_of]
find_by_scan(*args)
else
scope.find(*args)
@@ -567,7 +567,8 @@ module ActiveRecord
end
end
- # If using a custom finder_sql, #find scans the entire collection.
+ # If using a custom finder_sql or if the :inverse_of option has been
+ # specified, then #find scans the entire collection.
def find_by_scan(*args)
expects_array = args.first.kind_of?(Array)
ids = args.flatten.compact.map{ |arg| arg.to_i }.uniq