ошибка "неинициализированная постоянная регистрация" при использовании Devise для самостоятельной регистрации пользователя и регистрации пользователя Cancan super_admin - PullRequest
1 голос
/ 10 марта 2012

Я следовал приведенному ниже руководству и создал одно целое приложение.

http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/ http://www.tonyamoyal.com/2010/09/29/rails-authentication-with-devise-and-cancan-part-2-restful-resources-for-administrators/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, используйте разработанный контроллер пользовательских регистраций для регистрации нового пользователя. Тут # 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"}

примечание, совпадающее с глаголом http: путь Post / users и user_registrations был найден первым.

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

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

Но не знаю, как лучше всего избежать этого конфликта. Можете ли вы пролить свет на это? Я не могу понять из вашего урока.

Заранее спасибо,

George

Ответы [ 2 ]

1 голос
/ 14 июня 2012

Чтобы избежать конфликта маршрутов и , чтобы избежать "неудобства кодирования", вы можете использовать область действия:

scope '/admin' do
  resources :users
end

Тогда ваши маршруты будут выглядеть следующим образом:

                  POST   /admin/users(.:format)          users#create
user_registration POST   /users(.:format)                users/registrations#create
0 голосов
/ 14 марта 2012

Чтобы избежать конфликта маршрутов, я решил переместить контроллер / представления индекса / добавить / обновить / удалить пользователей с помощью admin в пространство имен Admin, чтобы сохранить спокойствие.то есть

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

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

Пространство имен вызовет некоторые неудобства при кодировании, но с этим вполне можно справиться.

...