mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Handle RangeError
from casting in find_by
and find_by!
on Relation
We should not behave differently just because a class has a default scope.
This commit is contained in:
parent
d5902c9e7e
commit
76d6d88280
2 changed files with 14 additions and 0 deletions
|
@ -82,12 +82,16 @@ module ActiveRecord
|
||||||
# Post.find_by "published_at < ?", 2.weeks.ago
|
# Post.find_by "published_at < ?", 2.weeks.ago
|
||||||
def find_by(*args)
|
def find_by(*args)
|
||||||
where(*args).take
|
where(*args).take
|
||||||
|
rescue RangeError
|
||||||
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
# Like <tt>find_by</tt>, except that if no record is found, raises
|
# Like <tt>find_by</tt>, except that if no record is found, raises
|
||||||
# an <tt>ActiveRecord::RecordNotFound</tt> error.
|
# an <tt>ActiveRecord::RecordNotFound</tt> error.
|
||||||
def find_by!(*args)
|
def find_by!(*args)
|
||||||
where(*args).take!
|
where(*args).take!
|
||||||
|
rescue RangeError
|
||||||
|
raise RecordNotFound, "Couldn't find #{@klass.name} with an out of range value"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Gives a record (or N records if a parameter is supplied) without any implied
|
# Gives a record (or N records if a parameter is supplied) without any implied
|
||||||
|
|
|
@ -210,6 +210,16 @@ class FinderTest < ActiveRecord::TestCase
|
||||||
assert_nil Topic.find_by_id('9999999999999999999999999999999')
|
assert_nil Topic.find_by_id('9999999999999999999999999999999')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_find_on_relation_with_large_number
|
||||||
|
assert_nil Topic.where('1=1').find_by(id: 9999999999999999999999999999999)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_find_by_bang_on_relation_with_large_number
|
||||||
|
assert_raises(ActiveRecord::RecordNotFound) do
|
||||||
|
Topic.where('1=1').find_by!(id: 9999999999999999999999999999999)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_find_an_empty_array
|
def test_find_an_empty_array
|
||||||
assert_equal [], Topic.find([])
|
assert_equal [], Topic.find([])
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue