我的应用程序中的用户URL如下:
localhost:3000/users/1/dashboard
如果有人手动将网址中的user ID
更改为没有用户签名的号码,则会向我显示错误:
Couldn't find User with id=X.
有没有办法让用户返回其他地方?
我在user_controller.rb中试过类似的东西:
@user = User.find(params[:id])
unless @user
redirect_to root_path
end
答案 0 :(得分:3)
是的,例如:
def dashboard
begin
@user = User.find(params[:id])
rescue ActiveRecord::RecordNotFound
redirect_to root_path
end
end
如果ActiveRecord无法找到记录,则会引发异常,这就是为什么unless @user ...
无效。
答案 1 :(得分:1)
另一种不需要resque的方法是使用find_by_id,如果没有找到记录则返回nil:
def dashboard
@user = User.find_by_id params[:id]
redirect_to root_path unless @user
end