From 80d9c50220fee135f7ad8d0310b019823b0f3be9 Mon Sep 17 00:00:00 2001 From: miloops Date: Fri, 21 Nov 2008 18:39:34 -0300 Subject: [PATCH] Allow find last to return more than one element. For example: the last 5 records. --- activerecord/lib/active_record/base.rb | 6 +++++- activerecord/test/cases/base_test.rb | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index cff5fd7..eb9d12d 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1470,7 +1470,11 @@ module ActiveRecord #:nodoc: scoped_methods.select { |s| s[:find].update(:order => scoped_order) } end - find_initial(options.merge({ :order => order })) + if options[:limit] + find_every(options.merge({ :order => order, :limit => options[:limit] })) + else + find_initial(options.merge({ :order => order })) + end end def reverse_sql_order(order_query) diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 5f54931..9ea7e72 100755 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -1747,6 +1747,12 @@ class BasicsTest < ActiveRecord::TestCase assert_equal last, Developer.find(:first, :order => 'id desc') end + def test_find_many_last + developers = Developer.all + assert_equal Developer.find(:last, :limit => 5), + [developers[-1], developers[-2], developers[-3], developers[-4], developers[-5]] + end + def test_last assert_equal Developer.find(:first, :order => 'id desc'), Developer.last end -- 1.5.5.1