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

ruby-on-rails – 使用给定对象查找数据库中的下一个ActiveRecor

发布时间:2020-12-17 04:03:16 所属栏目:百科 来源:网络整理
导读:我有一个ActiveRecord模型对象@gallery,它代表了Galleries MYSQL表中的一行.有没有办法让我问@gallery给我表中下一个画廊对象的id? 对我来说,显而易见的方法是: @galleries = Gallery.find(:all)index = @galleries.index(@gallery)@nextgallery = @galler
我有一个ActiveRecord模型对象@gallery,它代表了Galleries MYSQL表中的一行.有没有办法让我问@gallery给我表中下一个画廊对象的id?

对我来说,显而易见的方法是:

@galleries = Gallery.find(:all)
index = @galleries.index(@gallery)

@nextgallery = @galleries[index+1]

但后来我必须nilsafe这个,我不必要另一个DB调用来获取所有记录.
还有其他出路吗?

解决方法

我一直处于类似的情况,最终使用Rails 3.1.3的几个解决方案,使用类方法或范围(Rails 2.x中的named_scope).即使没有连续的ID,这种方法也能正常工作.

使用Post模型的类方法示例:

def next
  Post.where("posts.id > ?",self.id).order("posts.id ASC").limit(1)
end

def previous
  Post.where("posts.id < ?",self.id).order("posts.id DESC").limit(1)
end

这可以像:

post = Post.find(5)

next_post = post.next
 => [#<Post id: 6,...]

previous_post = post.previous
 => [#<Post id: 4,...]

对于范围,使用lambda应该是这样的:

scope :next,lambda { |i| {:conditions => ["#{self.table_name}.id > ?",i.id],:order => "#{self.table_name}.id ASC",:limit => 1} }
  scope :previous,lambda { |i| {:conditions => ["#{self.table_name}.id < ?",:order => "#{self.table_name}.id DESC",:limit => 1} }

(编辑:李大同)

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

    推荐文章
      热点阅读