如何查找 ActiveRecord 集中的下一条记录?

发布于 2024-09-11 12:24:57 字数 165 浏览 10 评论 0原文

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

@work.find_by_id(params[:id])

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

I am working in Padrino and have this in my controller

@work.find_by_id(params[:id])

I want to add prev/next buttons into my view, and so must be able to get the path to the next item on the list. How can I do that with ActiveRecord?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

紫竹語嫣☆ 2024-09-18 12:24:57

您可能需要查看 ActsAsAdjacent 插件。我不确定您是否可以在 Padrino 中使用插件,但代码非常简单,应该能够适应您的需求。

You may want to checkout the ActsAsAdjacent plugin. I'm not sure if you can use plugins with Padrino, but the code is pretty simple, and should be able to adapt to your needs.

半仙 2024-09-18 12:24:57

我使用 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  

然后您就可以了。

I use a PreviousNextable module like so:

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

This code was adapted from an SO answer given by Ryan Bates. Your order and conditions to determine what's previous or next will likely differ. Probably you'll want to use 'created_at'.

Include the module in your model class:

class Place < ActiveRecord::Base
  include PreviousNextable  

and you're off.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文