diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-05-08 23:43:34 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2011-05-08 23:43:34 +0100 |
commit | 72a489345280964b4e4350fa6104658cd4e8da84 (patch) | |
tree | 8351dd83c3f7254c6ff0ed9f2c7a3eac832d2323 /activerecord | |
parent | 8f10ccd311e0813114c1aca266c82651ae77f6ca (diff) | |
parent | 92c10760d7f5e1d308e492d5fd3d551df41bfabb (diff) | |
download | rails-72a489345280964b4e4350fa6104658cd4e8da84.tar.gz rails-72a489345280964b4e4350fa6104658cd4e8da84.tar.bz2 rails-72a489345280964b4e4350fa6104658cd4e8da84.zip |
Merge pull request #451 from baroquebobcat/fixing_last_for_issue_371
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/relation/finder_methods.rb | 7 | ||||
-rw-r--r-- | activerecord/test/cases/finder_test.rb | 21 |
2 files changed, 27 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb index 57c9921ea8..32d1cff6c3 100644 --- a/activerecord/lib/active_record/relation/finder_methods.rb +++ b/activerecord/lib/active_record/relation/finder_methods.rb @@ -375,7 +375,12 @@ module ActiveRecord if loaded? @records.last else - @last ||= reverse_order.limit(1).to_a[0] + @last ||= + if offset_value || limit_value + to_a.last + else + reverse_order.limit(1).to_a[0] + end end end diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index be4ba18555..4e75eafe3d 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -683,6 +683,27 @@ class FinderTest < ActiveRecord::TestCase assert_nil Topic.find_last_by_title_and_author_name(topic.title, "Anonymous") end + def test_find_last_with_limit_gives_same_result_when_loaded_and_unloaded + scope = Topic.limit(2) + unloaded_last = scope.last + loaded_last = scope.all.last + assert_equal loaded_last, unloaded_last + end + + def test_find_last_with_limit_and_offset_gives_same_result_when_loaded_and_unloaded + scope = Topic.offset(2).limit(2) + unloaded_last = scope.last + loaded_last = scope.all.last + assert_equal loaded_last, unloaded_last + end + + def test_find_last_with_offset_gives_same_result_when_loaded_and_unloaded + scope = Topic.offset(3) + unloaded_last = scope.last + loaded_last = scope.all.last + assert_equal loaded_last, unloaded_last + end + def test_find_all_by_one_attribute topics = Topic.find_all_by_content("Have a nice day") assert_equal 2, topics.size |