ruby-on-rails-3 - 由于 'redirect_to root_url' 未通过操作导致的 RoutingError

标签 ruby-on-rails-3 cancan rails-admin

通过使用 Devise 进行身份验证和 CanCan 进行授权的 Rails_Admin 标准安装,访问 http://localhost:3000/admin作为非管理员用户生成以下服务器日志:

Started GET "/admin" for 127.0.0.1 at 2011-08-09 22:46:10 -0400
  Processing by RailsAdmin::MainController#index as HTML
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Completed 404 Not Found in 151ms

ActionController::RoutingError (No route matches {:controller=>"gyms"}):
  app/controllers/application_controller.rb:5:in `block in <class:ApplicationController>'

直到最后一部分的一切似乎都还可以。据我所知,CanCan 正确地挽救了异常并尝试通过以下代码重定向到 root_url:
class ApplicationController < ActionController::Base
  protect_from_forgery

  rescue_from CanCan::AccessDenied do |exception|
    redirect_to root_url, :alert => exception.message
  end
end

TopOut::Application.routes.draw do
  mount RailsAdmin::Engine => '/admin', :as => 'rails_admin'
  devise_for :users

  resources :gyms

  root :to => "gyms#index"
end

但出于某种原因,在重定向到 root_url 时,CanCan 只是试图点击
{:controller=>"gyms"}

而不是
{:controller=>"gyms", :action=>"index"}

这可能是 CanCan 的问题吗?或者我在文档中遗漏了 redirect_to 或 root_url 的某些特定方面吗?

注意:这是我在 CanCan 的 github 页面上打开的一个问题的副本,所以如果另一个问题解决了,我一定会关闭一个。

最佳答案

根据 Github 用户的反馈,路由似乎是 name_scoped,因此这是预期的行为。

正确的解决方法是从 main_app 调用 root_url,如下所示:

rescue_from CanCan::AccessDenied do |exception|
  redirect_to main_app.root_url, :alert => exception.message
end

该解决方案归功于 https://github.com/sferik/rails_admin/issues/658bbenezech

关于ruby-on-rails-3 - 由于 'redirect_to root_url' 未通过操作导致的 RoutingError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013192/

相关文章:

ruby-on-rails - 在 Rails Admin 中将字段添加到 'new' View

ruby-on-rails - 如何从 rails_admin 中删除图像?

html - Rails 管理员自定义 : embed html view into dashboard

ruby-on-rails - 如何使用 Rails 3 中的范围通过关联计算唯一记录

ruby-on-rails - 在 Virtual Box Ubuntu 12.04 中运行 Rails 非常慢

ruby-on-rails - 如何在 Controller 能力测试中 stub load_and_authorize_resource 的负载?

ruby-on-rails - 如何使用cancan对一系列资源进行授权?

ruby-on-rails-3 - NOOB capybara Rspec 警告 : regexp match/. ../n 针对 UTF-8 字符串

ruby - cancan,每个用户一个角色 - 有什么方法可以在不重复这么多文本的情况下设置能力?

ruby-on-rails-3 - cancan 的 current_ability 方法是否为每个 can 方法调用?