Jen*_*sky 12 ruby-on-rails ruby-on-rails-4
什么是处理错误的最佳方法,然后找不到ID?我的控制器中有这个代码:
def show
@match = Match.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
我在考虑这样的事情:
def show
if @match = Match.find(params[:id])
else
render 'error'
end
end
Run Code Online (Sandbox Code Playgroud)
但我仍然得到:
MatchesController#show中的ActiveRecord :: RecordNotFound
无法使用'id'= 2找到匹配
为什么?
什么是正确的解决方案?
xda*_*azz 25
在基本控制器中救援它,并使您的操作代码尽可能简单.你不想在每一个动作中都没有找到异常,对吗?
class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, :with => :render_404
def render_404
render :template => "errors/error_404", :status => 404
end
end
Run Code Online (Sandbox Code Playgroud)
默认情况下,该find方法引发ActiveRecord::RecordNotFound异常。处理未找到的记录的正确方法是:
def show
@match = Match.find(params[:id])
rescue ActiveRecord::RecordNotFound => e
render 'error'
end
Run Code Online (Sandbox Code Playgroud)
但是,如果您喜欢if / else方法,则可以使用find_by_id将返回nil 的方法:
def show
@match = Match.find_by_id(params[:id])
if @match.nil? # or unless @match
render 'error'
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7845 次 |
| 最近记录: |