使用Active Record查找数据库中的下一条记录

时间:2011-11-20 01:27:39

标签: ruby-on-rails ruby activerecord

所以我有我的rails应用程序,我的应用程序中有博客文章。 对于初学者我在rails 2.3.5和Ruby 1.8.7

对于展会页面,我需要提供prev / next博文的上一页/下一页链接。

问题是我需要找到下一个博客,其中数据库中的语言列等于'eng'。我已经开始在我的模型中编写它并且它可以工作但当然这将只是在数据库中找到prev / next记录,无论列中指定的语言是什么,并且当找不到记录时它将会中断。

def next(lang='eng')
 BlogEntry.find(self.id - 1)
end

def prev(lang='eng')
 BlogEntry.find(self.id + 1)
end

2 个答案:

答案 0 :(得分:4)

试试这个。这不会破坏丢失的记录。

BlogEntry.find(:first, :conditions => ["id > ? AND lang = ?", self.id, lang])

BlogEntry.find(:first, :conditions => ["id < ? AND lang = ?", self.id, lang])

答案 1 :(得分:1)

这样做id数学通常很危险,因为你不能保证它存在。例如,假设你有id为1,2和3的记录,那么你删除记录3但是创建一个新记录,ActiveRecord会将其分配为4(即使3不再是记录。所以如果你要做一个在记录2上找到(self.id + 1),您将收到错误。

最简单的方法可能是使用'where'语句。

def next(lang='eng')
    BlogEntry.where(:lang => lang).where("id > ?", self.id).first
end

def prev(lang='eng')
    BlogEntry.where(:lang => lang).where("id < ?", self.id).last
end

我不熟悉您正在使用的Rails版本的语法,但如果不相同,它可能非常相似。