mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #25941 from kamipo/finder_methods_uses_load_target
`FinderMethods` uses `records` (`load_target`) when `loaded?` is true
This commit is contained in:
commit
b37bd3d52f
3 changed files with 7 additions and 5 deletions
|
@ -29,7 +29,7 @@ module ActiveRecord
|
|||
# instantiation of the actual post records.
|
||||
class CollectionProxy < Relation
|
||||
delegate(*(ActiveRecord::Calculations.public_instance_methods - [:count]), to: :scope)
|
||||
delegate :find_nth, :exists?, :update_all, :arel, to: :scope
|
||||
delegate :exists?, :update_all, :arel, to: :scope
|
||||
|
||||
def initialize(klass, association) #:nodoc:
|
||||
@association = association
|
||||
|
|
|
@ -514,7 +514,7 @@ module ActiveRecord
|
|||
|
||||
def find_take
|
||||
if loaded?
|
||||
@records.first
|
||||
records.first
|
||||
else
|
||||
@take ||= limit(1).records.first
|
||||
end
|
||||
|
@ -531,7 +531,7 @@ module ActiveRecord
|
|||
MSG
|
||||
end
|
||||
if loaded?
|
||||
@records[index]
|
||||
records[index]
|
||||
else
|
||||
offset ||= offset_index
|
||||
@offsets[offset + index] ||= find_nth_with_limit_and_offset(index, 1, offset: offset).first
|
||||
|
@ -557,7 +557,7 @@ module ActiveRecord
|
|||
|
||||
def find_nth_from_last(index)
|
||||
if loaded?
|
||||
@records[-index]
|
||||
records[-index]
|
||||
else
|
||||
relation = if order_values.empty? && primary_key
|
||||
order(arel_attribute(primary_key).asc)
|
||||
|
@ -578,7 +578,7 @@ module ActiveRecord
|
|||
|
||||
def find_nth_with_limit_and_offset(index, limit, offset:) # :nodoc:
|
||||
if loaded?
|
||||
@records[index, limit]
|
||||
records[index, limit]
|
||||
else
|
||||
index += offset
|
||||
find_nth_with_limit(index, limit)
|
||||
|
|
|
@ -254,6 +254,8 @@ class AssociationProxyTest < ActiveRecord::TestCase
|
|||
test "first! works on loaded associations" do
|
||||
david = authors(:david)
|
||||
assert_equal david.posts.first, david.posts.reload.first!
|
||||
assert david.posts.loaded?
|
||||
assert_no_queries { david.posts.first! }
|
||||
end
|
||||
|
||||
def test_reset_unloads_target
|
||||
|
|
Loading…
Reference in a new issue