我正在使用以下内容;
def index
@user = User.find(params[:id])
rescue
flash[:notice] = "ERROR"
redirect_to(:action => 'index')
else
flash[:notice] = "OK"
redirect_to(:action => 'index')
end
现在无论我是否拥有正确的身份证,我的观点总是“好”,我做错了什么?
当我在DB中没有ID显示“ERROR”时,我需要这样做。我也试过使用rescue ActiveRecord::RecordNotFound
,但同样的事情发生了。
感谢所有帮助。
答案 0 :(得分:33)
仅当救援块中没有返回时,才解释救援块结束后的所有代码。所以你可以在救援区结束时给他们打电话。
def index
begin
@user = User.find(params[:id])
rescue
flash[:notice] = "ERROR"
redirect_to(:action => 'index')
return
end
flash[:notice] = "OK"
redirect_to(:action => 'index')
end
或
def index
@user = User.find(params[:id])
# after is interpret only if no exception before
flash[:notice] = "OK"
redirect_to(:action => 'index')
rescue
flash[:notice] = "ERROR"
redirect_to(:action => 'index')
end
但在您的情况下,最好使用rescue_from或rescue_in_public
像
class UserController < ApplicationController
def rescue_in_public(exception)
flash[:notice] = "ERROR"
redirect_to(:action => 'index')
end
def index
@user = User.find(params[:id])
flash[:notice] = "OK"
redirect_to(:action => 'index')
end
end
但是使用rescue_in_public并不是一个很好的建议
答案 1 :(得分:4)
只是一个整体的Rails Rescue答案:
我觉得这很酷:
@user = User.find(params[:id]) rescue ""
答案 2 :(得分:-5)
如果user
没有id
,则User.find
将返回nil
。返回nil
不是错误情况,也不会触发rescue
。