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} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |