因此,我有我的rails应用程序和我的应用程序中的博客文章。对于初学者来说,我使用的是rails 2.3.5和Ruby 1.8.7
对于显示页面,我需要给出上一篇/下一篇博客文章的上一篇/下一篇链接。
问题是,我需要找到数据库中语言列等于'eng‘的下一个博客。我已经开始在我的模型中写出了这一点,并且它可以工作,但当然这只会在数据库中找到上一条/下一条记录,无论在列中指定了什么语言,当找不到该记录时,它都会中断。
def next(lang='eng')
BlogEntry.find(self.id - 1)
end
def prev(lang='eng')
BlogEntry.find(self.id + 1)
end发布于 2011-11-20 09:34:55
尝尝这个。这不会打破丢失的记录。
BlogEntry.find(:first, :conditions => ["id > ? AND lang = ?", self.id, lang])和
BlogEntry.find(:first, :conditions => ["id < ? AND lang = ?", self.id, lang])发布于 2011-11-20 09:43:50
像这样做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版本的语法,但它可能非常相似,如果不相同的话。
https://stackoverflow.com/questions/8198750
复制相似问题