Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

DRY up first/last and hence make last benefit from the bugfix in first

  • Loading branch information...
commit b7bcc7e1905062f330e0a84b93a1ecacfea2a4c0 1 parent e8d7152
@jonleighton jonleighton authored
View
28 activerecord/lib/active_record/associations/association_collection.rb
@@ -36,25 +36,12 @@ def find(*args)
end
end
- # Fetches the first one using SQL if possible.
def first(*args)
- if fetch_first_or_last_using_find?(args)
- scoped.first(*args)
- else
- load_target unless loaded?
- args.shift if args.first.kind_of?(Hash) && args.first.empty?
- @target.first(*args)
- end
+ first_or_last(:first, *args)
end
- # Fetches the last one using SQL if possible.
def last(*args)
- if fetch_first_or_last_using_find?(args)
- scoped.last(*args)
- else
- load_target unless loaded?
- @target.last(*args)
- end
+ first_or_last(:last, *args)
end
def to_ary
@@ -560,6 +547,17 @@ def find_by_scan(*args)
load_target.select { |r| ids.include?(r.id) }
end
end
+
+ # 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
+ load_target unless loaded?
+ args.shift if args.first.kind_of?(Hash) && args.first.empty?
+ @target.send(type, *args)
+ end
+ end
end
end
end
View
6 activerecord/test/cases/associations/has_many_associations_test.rb
@@ -86,10 +86,16 @@ def test_no_sql_should_be_fired_if_association_already_loaded
Car.create(:name => 'honda')
bulbs = Car.first.bulbs
bulbs.inspect # to load all instances of bulbs
+
assert_no_queries do
bulbs.first()
bulbs.first({})
end
+
+ assert_no_queries do
+ bulbs.last()
+ bulbs.last({})
+ end
end
def test_create_resets_cached_counters
Please sign in to comment.
Something went wrong with that request. Please try again.