当@user为nil时,为什么在操作之前不会重定向?
Redirected to http://localhost:3000/errors/404
我实际上可以看到它在日志中重定向(粘贴在下面)。
byte[] subType = { 2, 4 };
var locationType = 2;
Console.WriteLine(subType.Contains(locationType));
Console.ReadLine();
但不是将该错误页面和路由从控制器操作中移除,而是完成操作并导致错误,表示@user为nil。
答案 0 :(得分:1)
find
方法永远不会返回nil
。相反,如果具有该ID的记录不存在,则会引发ActiveRecord::RecordNotFound
错误。
最简单的解决方法是使用rescue_from
:
class YourController < ApplicationController
rescue_from ActiveRecord::RecordNotFound, with: :redirect_to_not_found
# Other code
private
def set_user
@user ||= User.find(params[:id])
end
def redirect_to_not_found
redirect_to "/errors/404"
end
end
现在,只要找不到用户,就会调用redirect_to_not_found
方法。