簡體   English   中英

使用Devise進行用戶自注冊和Cancan super_admin注冊用戶時出現錯誤“未初始化的常量注冊”

[英]error “uninitialized constant Registration” using Devise for user self-registration and Cancan super_admin register user

我遵循以下教程,並構建了一個完整的完整應用程序。

http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/ http://www.tonyamoyal.com/2010/09/29/ Rails的認證和設計,可以為管理員提供部分2的可靠資源/ comment-page-2 /#comment-879

一切都好,直到我最后遇到一個問題。

問題是當super_admin用戶嘗試創建新用戶時。 我收到錯誤消息:

Started POST "/users" for 127.0.0.1 at 2012-03-09 23:37:51 -0500
  Processing by RegistrationsController#create as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"c8v6fmCFSlJV2v9qClxD46c1wcBU7n78Mk9xWsJm/Ls=", "user"=>{"email"=>"test@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "customer_attributes"=>{"first_name"=>"test", "last_name"=>"doe"}, "role_ids"=>["", "3"]}, "commit"=>"Sign up"}
Completed   in 9ms

NameError(未初始化的常量注冊):我能弄清楚的是路由沖突。 教程1,使用devise定制注冊控制器注冊新用戶。 tut#2,添加了另一種通過super_admin創建新用戶的方法。 以下是路線清單。

cancel_user_registration GET    /users/cancel(.:format)             {:action=>"cancel", :controller=>"registrations"}
       user_registration POST   /users(.:format)                    {:action=>"create", :controller=>"registrations"}
   new_user_registration GET    /users/register(.:format)           {:action=>"new", :controller=>"registrations"}
  edit_user_registration GET    /users/edit(.:format)               {:action=>"edit", :controller=>"registrations"}
                         PUT    /users(.:format)                    {:action=>"update", :controller=>"registrations"}
                         DELETE /users(.:format)                    {:action=>"destroy", :controller=>"registrations"}
       user_confirmation POST   /users/confirmation(.:format)       {:action=>"create", :controller=>"devise/confirmations"}
   new_user_confirmation GET    /users/confirmation/new(.:format)   {:action=>"new", :controller=>"devise/confirmations"}
                         GET    /users/confirmation(.:format)       {:action=>"show", :controller=>"devise/confirmations"}
                   users GET    /users(.:format)                    {:action=>"index", :controller=>"users"}
                         POST   /users(.:format)                    {:action=>"create", :controller=>"users"}
                new_user GET    /users/new(.:format)                {:action=>"new", :controller=>"users"}
               edit_user GET    /users/:id/edit(.:format)           {:action=>"edit", :controller=>"users"}
                    user GET    /users/:id(.:format)                {:action=>"show", :controller=>"users"}
                         PUT    /users/:id(.:format)                {:action=>"update", :controller=>"users"}
                         DELETE /users/:id(.:format)                {:action=>"destroy", :controller=>"users"}

note匹配http動詞Post / users和user_registrations路徑的匹配項首先匹配。

                     POST   /users(.:format)                    {:action=>"create", :controller=>"users"}

   user_registration POST   /users(.:format)                    {:action=>"create", :controller=>"registrations"}

但是不知道什么是避免這種沖突的最佳方法。 您能對此有所了解嗎? 我無法從您的教程中弄清楚。

提前致謝,

喬治

為了避免路由沖突避免任何“編碼不便”,您可以使用范圍:

scope '/admin' do
  resources :users
end

您的路線將如下所示:

                  POST   /admin/users(.:format)          users#create
user_registration POST   /users(.:format)                users/registrations#create

為了避免路由沖突,我決定將admin的控制器/索引/添加/更新/刪除用戶的視圖移到Admin名稱空間中,以保持寧靜。

                 POST   /admin/users(.:format)                    {:action=>"create", :controller=>"admin/users"}

   user_registration POST   /users(.:format)                    {:action=>"create", :controller=>"registrations"}

命名空間會帶來一些編碼上的不便,但是可以解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM