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/relation | |
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/relation')
-rw-r--r-- | activerecord/lib/active_record/relation/finder_methods.rb | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb index e2685d0478..a03d4bfeff 100644 --- a/activerecord/lib/active_record/relation/finder_methods.rb +++ b/activerecord/lib/active_record/relation/finder_methods.rb @@ -176,6 +176,28 @@ module ActiveRecord false end + # This method is called whenever no records are found with either a single + # id or multiple ids and raises a +ActiveRecord::RecordNotFound+ exception. + # + # The error message is different depending on whether a single id or + # multiple ids are provided. If multiple ids are provided, then the number + # of results obtained should be provided in the +result_size+ argument and + # the expected number of results should be provided in the +expected_size+ + # argument. + def raise_record_not_found_exception!(ids, result_size, expected_size) #:nodoc: + conditions = arel.where_sql + conditions = " [#{conditions}]" if conditions + + if Array(ids).size == 1 + error = "Couldn't find #{@klass.name} with #{primary_key}=#{ids}#{conditions}" + else + error = "Couldn't find all #{@klass.name.pluralize} with IDs " + error << "(#{ids.join(", ")})#{conditions} (found #{result_size} results, but was looking for #{expected_size})" + end + + raise RecordNotFound, error + end + protected def find_with_associations @@ -259,11 +281,7 @@ module ActiveRecord relation.bind_values += [[column, id]] record = relation.take - unless record - conditions = arel.where_sql - conditions = " [#{conditions}]" if conditions - raise RecordNotFound, "Couldn't find #{@klass.name} with #{primary_key}=#{id}#{conditions}" - end + raise_record_not_found_exception!(id, 0, 1) unless record record end @@ -286,12 +304,7 @@ module ActiveRecord if result.size == expected_size result else - conditions = arel.where_sql - conditions = " [#{conditions}]" if conditions - - error = "Couldn't find all #{@klass.name.pluralize} with IDs " - error << "(#{ids.join(", ")})#{conditions} (found #{result.size} results, but was looking for #{expected_size})" - raise RecordNotFound, error + raise_record_not_found_exception!(ids, result.size, expected_size) end end |