在Rails上获取模型或404

Seb*_*ien 14 ruby ruby-on-rails

是否可以在rails上使用get_by_id_or_404函数.例如,在我的控制器中我使用:

@destination = Destination.find_by_id(params[:id])
Run Code Online (Sandbox Code Playgroud)

如果没有设置id或找不到目的地,我怎么能要求Rails重定向到404页面?

谢谢!

Sim*_*tti 31

在生产模式下,Rails ActiveRecord::RecordNotFound通过呈现404错误页面自动挽救异常.

只需使用ActiveRecord::RecordNotFound找不到结果的发现器的爆炸版本.

@destination = Destination.find_by_id!(params[:id])
Run Code Online (Sandbox Code Playgroud)

但是,在您的情况下,没有理由使用该find_by方法.简单地回归到find.

@destination = Destination.find(params[:id])
Run Code Online (Sandbox Code Playgroud)


rdv*_*ijk 6

这是来自指南

您可以在动态查找器的末尾指定一个感叹号 (!),让它们在不返回任何记录时引发 ActiveRecord::RecordNotFound 错误,例如 Client.find_by_name!("Ryan")

发生这种情况时,Rails 会为您呈现 404 页面。此外,只需find用作以下内容的快捷方式find_by_id

@destination = Destination.find!(params[:id])
Run Code Online (Sandbox Code Playgroud)