是否可以在rails上使用get_by_id_or_404函数,例如,在我的控制器中,我用途:
@destination = Destination.find_by_id(params[:id])
如果没有设置id或者没有找到目的地,我如何让Rails重定向到404页面?谢谢大家!
arknldoa1#
在生产模式下,Rails通过呈现404错误页面自动挽救ActiveRecord::RecordNotFound异常。只需使用bang版本的finder,它在找不到结果时引发ActiveRecord::RecordNotFound。
ActiveRecord::RecordNotFound
@destination = Destination.find_by_id!(params[:id])
但是,在您的情况下,没有理由使用find_by方法,只需退回到find即可。
find_by
find
@destination = Destination.find(params[:id])
bfnvny8b2#
这是从指南:您可以在动态查找器的末尾指定一个感叹号(!),以便在它们不返回任何记录时引发ActiveRecord::RecordNotFound错误,如Client.find_by_name!(“Ryan”)当这种情况发生时,Rails将为您呈现404页面。另外,只需使用find作为find_by_id的快捷方式:
find_by_id
@destination = Destination.find!(params[:id])
ljo96ir53#
我认为在生产中,它会提高错误,并显示404或500。
3条答案
按热度按时间arknldoa1#
在生产模式下,Rails通过呈现404错误页面自动挽救
ActiveRecord::RecordNotFound
异常。只需使用bang版本的finder,它在找不到结果时引发
ActiveRecord::RecordNotFound
。但是,在您的情况下,没有理由使用
find_by
方法,只需退回到find
即可。bfnvny8b2#
这是从指南:
您可以在动态查找器的末尾指定一个感叹号(!),以便在它们不返回任何记录时引发ActiveRecord::RecordNotFound错误,如Client.find_by_name!(“Ryan”)
当这种情况发生时,Rails将为您呈现404页面。另外,只需使用
find
作为find_by_id
的快捷方式:ljo96ir53#
我认为在生产中,它会提高错误,并显示404或500。