gpt4 book ai didi

ruby-on-rails - 接下来,使用命名范围的先前记录

转载 作者:行者123 更新时间:2023-12-04 03:44:31 27 4
gpt4 key购买 nike

我有一个模型,我想为其检索下一条记录和上一条记录。我想通过模型上的 named_scope 来执行此操作,并且还将要返回的下一个/上一个记录的 X 数作为参数传入。

例如,假设我有 5 条记录:

  • 记录1
  • 记录2
  • 记录3
  • 记录4
  • 记录5

  • 我希望能够调用 Model.previous 或 Model.previous(1) 来返回 Record2。同样,我希望能够调用 Model.next 或 Model.next(1) 来返回 Record4。作为另一个例子,我希望能够调用 Model.previous(2) 来返回 Record3。我想你应该已经明白了。

    我怎样才能做到这一点?

    最佳答案

    要实现诸如“Model.previous”之类的东西,类本身必须具有“当前”状态。如果您的示例中的“当前”记录(可能在发布调度系统中?)是 Record3,那么这将是有意义的,但您的示例不建议这样做。

    如果要获取模型的实例并获取下一条或上一条记录,以下是一个简单示例:

    class Page < ActiveRecord::Base
    def previous(offset = 0)
    self.class.first(:conditions => ['id < ?', self.id], :limit => 1, :offset => offset, :order => "id DESC")
    end

    def next(offset = 0)
    self.class.first(:conditions => ['id > ?', self.id], :limit => 1, :offset => offset, :order => "id ASC")
    end
    end

    如果是这样,您可以执行以下操作:
    @page = Page.find(4)
    @page.previous

    也工作将是:
    @page.previous(1)
    @page.next
    @page.next(1)

    显然,这假设“下一个”和“上一个”的概念是由“id”字段构成的,这可能不会在应用程序的整个生命周期中很好地扩展。

    如果您确实想在类上使用它,您也许可以将其扩展到将“当前”记录作为参数的命名范围。像这样的东西:
    named_scope :previous, lambda { |current, offset| { :conditions => ['id < ?', current], :limit => 1, :offset => offset, :order => "id DESC" }}

    这意味着您可以调用:
    Page.previous(4,1)

    其中“4”是您要开始的记录的 ID,1 是您要返回的编号。

    关于ruby-on-rails - 接下来,使用命名范围的先前记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754810/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com