加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:57:57 所属栏目:百科 来源:网络整理
导读:我有一个模型,我想要检索下一个记录和以前的记录.我想通过模型上的named_scope来做这件事,并且还作为参数传入要返回的下一个/前一个记录的X个数. 例如,假设我有5条记录: 记录1 记录2 Record3 记录4 记录5 我希望能够调用Model.previous或Model.previous(1)
我有一个模型,我想要检索下一个记录和以前的记录.我想通过模型上的named_scope来做这件事,并且还作为参数传入要返回的下一个/前一个记录的X个数.

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

>记录1
>记录2
> Record3
>记录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 > ?',:order => "id ASC")
  end
end

如果是这样,你可以这样做:

@page = Page.find(4)
@page.previous

还有以下工作:

@page.previous(1)
@page.next
@page.next(1)

显然,这假设’next’和’previous’的概念是’id’字段,这可能不会在应用程序的整个生命周期中延伸得很好.

如果你确实想在类上使用它,你可以将它扩展到一个命名范围,该范围将“当前”记录作为参数.像这样的东西:

named_scope :previous,lambda { |current,offset| { :conditions => ['id < ?',current],:order => "id DESC" }}

这意味着你可以打电话:

Page.previous(4,1)

其中“4”是您要开始的记录的ID,1是您要导航回来的号码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读