如何在ActiveRecord集中找到下一条记录?

时间:2010-07-29 02:22:41

标签: database activerecord orm padrino

我在Padrino工作并在我的控制器中有这个

@work.find_by_id(params[:id])

我想在我的视图中添加prev / next按钮,因此必须能够获取列表中下一个项目的路径。我怎么能用ActiveRecord做到这一点?

2 个答案:

答案 0 :(得分:0)

您可能想要结帐ActsAsAdjacent plugin。我不确定你是否可以使用Padrino的插件,但代码非常简单,应该能够适应你的需求。

答案 1 :(得分:0)

我使用PreviousNextable模块,如下所示:

module PreviousNextable  

  def self.included(klass)

    klass.class_eval do
      extend ActiveSupport::Memoizable 
      memoize :previous
      memoize :next
    end

  end  

  def previous
    self.class.last :order => 'name', :conditions => ['name < ?', self.name]
  end

  def next
    self.class.first :order => 'name', :conditions => ['name > ?', self.name]
  end

end

此代码改编自Ryan Bates给出的SO答案。您确定之前或之后的订单和条件可能会有所不同。可能你会想要使用'created_at'。

在模型类中包含模块:

class Place < ActiveRecord::Base
  include PreviousNextable  

然后你就离开了。