diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2017-07-21 12:26:09 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-01-18 16:01:14 +0900 |
commit | c196ca72a0dfbea5f1730f830ea20a9e02a3c737 (patch) | |
tree | 2017197758672519af2a2ef44eb674af35491a99 /activerecord/lib/active_record/associations | |
parent | 31ffbf8d5056137717da3f11d28c4fbd7fbc8f07 (diff) | |
download | rails-c196ca72a0dfbea5f1730f830ea20a9e02a3c737.tar.gz rails-c196ca72a0dfbea5f1730f830ea20a9e02a3c737.tar.bz2 rails-c196ca72a0dfbea5f1730f830ea20a9e02a3c737.zip |
Ensure `StatementCache#execute` never raises `RangeError`
Since 31ffbf8d, finder methods no longer raise `RangeError`. So
`StatementCache#execute` is the only place to raise the exception for
finder queries.
`StatementCache` is used for simple equality queries in the codebase.
This means that if `StatementCache#execute` raises `RangeError`, the
result could always be regarded as empty.
So `StatementCache#execute` just return nil in that range error case,
and treat that as empty in the caller side, then we can avoid catching
the exception in much places.
Diffstat (limited to 'activerecord/lib/active_record/associations')
-rw-r--r-- | activerecord/lib/active_record/associations/association.rb | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/associations/singular_association.rb | 2 |
2 files changed, 1 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/associations/association.rb b/activerecord/lib/active_record/associations/association.rb index fb205d9ba5..5d0927f17d 100644 --- a/activerecord/lib/active_record/associations/association.rb +++ b/activerecord/lib/active_record/associations/association.rb @@ -190,9 +190,7 @@ module ActiveRecord end binds = AssociationScope.get_bind_values(owner, reflection.chain) - sc.execute(binds, conn) do |record| - set_inverse_instance(record) - end + sc.execute(binds, conn) { |record| set_inverse_instance(record) } || [] end # The scope for this association. diff --git a/activerecord/lib/active_record/associations/singular_association.rb b/activerecord/lib/active_record/associations/singular_association.rb index c296f9882e..a92932fa4b 100644 --- a/activerecord/lib/active_record/associations/singular_association.rb +++ b/activerecord/lib/active_record/associations/singular_association.rb @@ -37,8 +37,6 @@ module ActiveRecord def find_target super.first - rescue ::RangeError - nil end def replace(record) |