Ruby on rails 4 重定向路由约束中的请求

Ruby on rails 4 重定向路由约束中的请求,ruby-on-rails-4,routes,cancan,sidekiq,cancancan,Ruby On Rails 4,Routes,Cancan,Sidekiq,Cancancan,我已在路由文件中将Sidekiq装载到/Sidekiq端点 我使用constraints选项让它调用外部类进行验证,以防止非私有用户访问该端点 # config/routes.rb mount Sidekiq::Web => "/sidekiq", constraints: Sidekiq::AdminConstraint.new # lib/sidekiq/admin_constraint.rb module Sidekiq class AdminConstraint de

我已在路由文件中将Sidekiq装载到
/Sidekiq
端点

我使用
constraints
选项让它调用外部类进行验证,以防止非私有用户访问该端点

# config/routes.rb
mount Sidekiq::Web => "/sidekiq", constraints: Sidekiq::AdminConstraint.new

# lib/sidekiq/admin_constraint.rb
module Sidekiq
  class AdminConstraint
    def matches?(request)
      return false unless request.session[:user_id]
      user = User.find_by_id(request.session[:user_id])
      user && Ability.new(user).can?(:manage, :sidekiq)
    end
  end
end
这个设置非常有效。但是,它只允许我返回请求是否应该通过的
true
/
false
。它不让我-

  • 设置一条快闪信息(例如“您不允许访问该页面”),以及
  • 重定向到任意页面
  • 从这个意义上说,我希望它的行为更像控制器的
    之前的过滤器

    有没有办法修改传入的
    请求
    对象以实现重定向


    谢谢

    我没有直接设置flash消息的想法,但我们可以用不同的方式

    否决票 认可的 第三条铁轨上的救援车坏了。不确定它是否已在以后的版本中修复

    使用以下解决方案

    在routes.rb中,在文件末尾添加以下行

    匹配“*path”,:to=>“应用程序#错误_404” 这基本上意味着,任何未在路由中定义的路径最终都将进入应用程序控制器中的错误404。把它放在文件的末尾是非常重要的

    在应用程序控制器中,添加

    def错误_404 将\重定向到根\路径 结束


    谢谢

    这个答案对我很有帮助: