[英]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.