diff options
author | wangjohn <wangjohn@mit.edu> | 2013-03-19 16:33:49 -0400 |
---|---|---|
committer | wangjohn <wangjohn@mit.edu> | 2013-03-19 16:33:49 -0400 |
commit | 840ca09a1151fafe1cb3299f12437378d25f2ce5 (patch) | |
tree | 95b740f525c3303b5b5938f4dd58dffdd8fa05fa /activerecord/lib/active_record | |
parent | a6c5ee3032c50720760f7a4c895206b4205836c0 (diff) | |
download | rails-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')
-rw-r--r-- | activerecord/lib/active_record/associations/collection_association.rb | 5 |
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 |