diff options
-rw-r--r-- | activerecord/lib/active_record/associations/association_collection.rb | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb index 586965bb3b..7151f53fdb 100644 --- a/activerecord/lib/active_record/associations/association_collection.rb +++ b/activerecord/lib/active_record/associations/association_collection.rb @@ -498,7 +498,7 @@ module ActiveRecord # * target contains new or changed record(s) # * the first arg is an integer (which indicates the number of records to be returned) def fetch_first_or_last_using_find?(args) - if args.first.kind_of?(Hash) && !args.first.empty? + if args.first.is_a?(Hash) true else !(loaded? || @@ -536,12 +536,10 @@ module ActiveRecord # Fetches the first/last using SQL if possible, otherwise from the target array. def first_or_last(type, *args) - if fetch_first_or_last_using_find?(args) - scoped.send(type, *args) - else - args.shift if args.first.kind_of?(Hash) && args.first.empty? - load_target.send(type, *args) - end + args.shift if args.first.is_a?(Hash) && args.first.empty? + + collection = fetch_first_or_last_using_find?(args) ? scoped : load_target + collection.send(type, *args) end end end |