diff options
author | wangjohn <wangjohn@mit.edu> | 2013-03-31 21:23:53 -0400 |
---|---|---|
committer | wangjohn <wangjohn@mit.edu> | 2013-04-01 15:56:23 -0400 |
commit | 6c5032f53de9f4ba1669ff9c9eea25c70bf3af33 (patch) | |
tree | 83956550aaf33af713bcfa1fee8c2c45f0558408 /activerecord/lib/active_record/associations/collection_association.rb | |
parent | 93302dc442231199fdb871e58055798e7c41b79c (diff) | |
download | rails-6c5032f53de9f4ba1669ff9c9eea25c70bf3af33.tar.gz rails-6c5032f53de9f4ba1669ff9c9eea25c70bf3af33.tar.bz2 rails-6c5032f53de9f4ba1669ff9c9eea25c70bf3af33.zip |
Throwing a RecordNotFound exception when a record is scanned using the
inverse_of option. I've also refactored the code for raising a
RecordNotFound exception when searching for records with ids.
Diffstat (limited to 'activerecord/lib/active_record/associations/collection_association.rb')
-rw-r--r-- | activerecord/lib/active_record/associations/collection_association.rb | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index 2385c90c1a..79e626f67e 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -79,8 +79,20 @@ module ActiveRecord if block_given? load_target.find(*args) { |*block_args| yield(*block_args) } else - if options[:finder_sql] || options[:inverse_of] + if options[:finder_sql] find_by_scan(*args) + elsif options[:inverse_of] + args = args.flatten + raise RecordNotFound, "Must specify an id to find" if args.blank? + + result = find_by_scan(*args) + + result_size = Array(result).size + if !result || result_size != args.size + scope.raise_record_not_found_exception!(args, result_size, args.size) + else + result + end else scope.find(*args) end |