过滤器之前没有重定向的Rails

时间:2015-12-16 22:38:11

标签: ruby-on-rails-4

当@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。

1 个答案:

答案 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方法。