进行“下一个”链接,但数据库中可能不存在id + 1记录

问题描述

|| 所以我想通过随机选择(初始)从数据库中选择一个显示“ 0”的页面。在该页面上,我想要
<%= link_to \"next\"%>
,但我想知道是否有一种有效的方法来确保下一条记录存在 目前我正在使用
# @phrase is current phrase   
<%= link_to \"next\",phrase_path( Phrase.find( @phrase.id + 1 ) ) %>
是的,我知道我应该从控制器调用@next,或者更好的是在模型中有一个下一个方法来调用@ phrase.next,但这只是出于说明目的。 但这经常会出现
ActiveRecord::RecordNotFound
错误,因为某些短语已从数据库中删除(由于审核,错误等)。我可以从中解救出来并循环运行,直到它在控制器中起作用然后再传递它之类的东西,但这似乎是一个糟糕的解决方案,并不是特别的“ railsy” 有没有找到一个方便的解决方案  弄清楚了 基于这个过时的链接,它从导轨2的背面使用了
named_scope
。我首先使用新的导轨3
scope
样式重写了它,但随后将其更改为一种方法。刚用过
def next 
   Phrase.where(\"id > ?\",self.id).order(\"id ASC\").first
end

def previous
   Phrase.where(\"id < ?\",self.id).order(\"id DESC\").first
end
    

解决方法

        尝试按照http://steve.dynedge.co.uk/2010/01/13/random-previous-and-next-entries-from-active-record-models-中的建议在模型上创建下一个/上一个范围使用偏移量/ 这将使您可以执行以下操作:
Phrase.next(5) or Phrase.next(@phrase.id)
    ,        为什么不在名为next的控制器中创建一个方法并传入当前记录ID。从那里将用户重定向回该下一个资源的显示页面很简单。 如果您对预先创建链接不满意,可以考虑创建一个辅助方法来查找存在的下一条记录,并将其在视图中使用。然后,您可以在需要下一个可用记录的ID时调用它。     ,        诸如will_paginate之类的东西也可能会有所帮助。我知道您的页面大小只是一个,但是您正在做的本质是分页。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...