首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库中查找具有活动记录的下一条记录

在数据库中查找具有活动记录的下一条记录
EN

Stack Overflow用户
提问于 2011-11-20 09:27:39
回答 2查看 1.6K关注 0票数 2

因此,我有我的rails应用程序和我的应用程序中的博客文章。对于初学者来说,我使用的是rails 2.3.5和Ruby 1.8.7

对于显示页面,我需要给出上一篇/下一篇博客文章的上一篇/下一篇链接。

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

代码语言:javascript
复制
def next(lang='eng')
 BlogEntry.find(self.id - 1)
end

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-20 09:34:55

尝尝这个。这不会打破丢失的记录。

代码语言:javascript
复制
BlogEntry.find(:first, :conditions => ["id > ? AND lang = ?", self.id, lang])

代码语言:javascript
复制
BlogEntry.find(:first, :conditions => ["id < ? AND lang = ?", self.id, lang])
票数 4
EN

Stack Overflow用户

发布于 2011-11-20 09:43:50

像这样做id数学通常是危险的,因为你不能保证它的存在。例如,假设您有id为1、2和3的记录,然后您删除了记录3,但创建了一个新记录,ActiveRecord会将其赋值为4(即使3不再是一个记录。因此,如果您对记录2执行查找(self.id+ 1),您将收到一个错误。

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

代码语言:javascript
复制
def next(lang='eng')
    BlogEntry.where(:lang => lang).where("id > ?", self.id).first
end

代码语言:javascript
复制
def prev(lang='eng')
    BlogEntry.where(:lang => lang).where("id < ?", self.id).last
end

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8198750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档