如果find在rails中没有返回任何内容,我怎么能跳过错误?

use*_*594 14 ruby-on-rails

我正在尝试建立一个系统,用户只能看到他或她写的文章.

在文章控制器中,我把它放在下面

@article = current_user.articles.find(params[:id])
Run Code Online (Sandbox Code Playgroud)

其中params [:id]是article_id.

我只想知道如何从显示中跳过错误,如果文章不存在,或者如果用户没有查看权限,只需重定向到:index操作.我把@ article.nil?上面的find语句之后的条件语句,但似乎上面的find语句会立即生成错误,如下所示.

找不到ID = 1662的文章[WHERE(articles.user_id = 1)]

我该如何解决这个问题?

Bre*_*der 22

如果ActiveRecord :: Base.find找不到记录,它总是抛出异常,这是故意的.你应该只使用,find如果你绝对希望拥有你正在寻找的任何东西.如果您要渲染show动作并且找不到该文章,则应该挽救该异常并呈现404(未找到)而不是重定向到索引(技术上).

如果你想在id没有强制异常的情况下通过它的属性找到某些东西,请使用动态查找器find_by_id,如果它没有找到具有该id的记录,则返回false.

编辑:

动态查找器现在具有不同的签名,find_by_id现在应该是:

find_by :id, id_to_find

请参阅新的Rails指南查询

  • 我建议使用“find_by”代替 (2认同)