设计命名空间 - ActionController :: RoutingError(没有路由匹配{:action =>“new”,:controller =>“devise / sessions”})

时间:2010-12-09 23:33:19

标签: ruby-on-rails devise

我正在使用Devise,一切都运行良好,但我现在正试图将事情转移到'admin'命名空间。

我的路线如下:

namespace :admin do
  devise_for :users, :controllers => { :registrations => "admin/users/registrations" }
end

我的一个控制器中有

before_filter :authenticate_user!

但是当它被调用时会抛出:

ActionController::RoutingError (No route matches {:action=>"new", :controller=>"devise/sessions"}): 

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

根据Devise文档(自发布以来可能已更改),您可以使用以下说明:

#    ...
#    
#    Notice that whenever you use namespace in the router DSL, it automatically sets the module.
#    So the following setup:
#
#      namespace :publisher do
#        devise_for :account
#      end
#
#    Will use publisher/sessions controller instead of devise/sessions controller. You can revert
#    this by providing the :module option to devise_for.
#    
#    ...

希望这有助于某人。

答案 1 :(得分:1)

我这样做:

scope '/admin' do
  devise_for :admins
end

答案 2 :(得分:1)

解决方法是使用path选项并移动devise_for块之外的namespace

devise_for :users, :path => '/admin',
                   :controllers => { :registrations => "admin/users/registrations" }
namespace :admin do
  # other resource controllers
end

也许它并不优雅(或直观),但它对我有用!