Создать контрольный контроллер регистрации - неинициализированная константа Пользователи:: РегистрацииКонтроллер

Я пытаюсь переопределить некоторые функции контроллера регистрации для разработки по умолчанию, чтобы только определенные пользователи могли создавать учетные записи для других. Итак, в файле registrations_controller.rb под папкой контроллеров/пользователей у меня есть следующий

class Users::RegistrationsController < Devise::RegistrationsController

  before_filter :check_permissions, :only => [:new, :create, :cancel]
  skip_before_filter :require_no_authentication

  def check_permissions
    authorize! :create, resource
  end
end

и в файле маршрутов у меня есть

devise_for: users,: controllerlers = > {: registrations = > 'users/registrations'}

Когда я пытаюсь перейти к URL-адресу users/sign_up, я получаю ошибку маршрутизации "uninitialized constant Users:: RegistrationsController".

Итак, что действительно меня отличает от этого, так это то, что я использовал практически такую ​​же функциональность в приложении rails 3 без проблем. Я посмотрел на некоторые из других вопросов stackoveflow, подобных этому, и я до сих пор не стал более мудрым. Приложение, которое я сейчас создаю, представляет собой приложение rails 3.1, и я использую devise 1.5.1

Вот соответствующие маршруты, в которых они полезны

new_user_session GET    /users/sign_in(.:format)                                      {:action=>"new", :controller=>"devise/sessions"}
                         user_session POST   /users/sign_in(.:format)                                    {:action=>"create", :controller=>"devise/sessions"}
                 destroy_user_session DELETE /users/sign_out(.:format)                                   {:action=>"destroy", :controller=>"devise/sessions"}
                        user_password POST   /users/password(.:format)                                   {:action=>"create", :controller=>"devise/passwords"}
                    new_user_password GET    /users/password/new(.:format)                               {:action=>"new", :controller=>"devise/passwords"}
                   edit_user_password GET    /users/password/edit(.:format)                              {:action=>"edit", :controller=>"devise/passwords"}
                                      PUT    /users/password(.:format)                                   {:action=>"update", :controller=>"devise/passwords"}
             cancel_user_registration GET    /users/cancel(.:format)                                     {:action=>"cancel", :controller=>"users/registrations"}
                    user_registration POST   /users(.:format)                                            {:action=>"create", :controller=>"users/registrations"}
                new_user_registration GET    /users/sign_up(.:format)                                    {:action=>"new", :controller=>"users/registrations"}
               edit_user_registration GET    /users/edit(.:format)                                       {:action=>"edit", :controller=>"users/registrations"}
                                      PUT    /users(.:format)                                            {:action=>"update", :controller=>"users/registrations"}
                                      DELETE /users(.:format)                                            {:action=>"destroy", :controller=>"users/registrations"}

Ответ 1

Я бы сказал, что-то не так в вашем имени файла.

Ваш файл должен называться users/registrations_controller.rb

Это подходит для меня.

Ответ 2

Где был сохранен ваш registrations_controller.rb? Место очень важно. Я обнаружил, что сделал ошибку, сохранив ее до app/controllers/devise/.. Его просто нужно было сохранить в app/controllers/. например:

app/controllers/registrations_controller.rb


Кроме того, маршрут config/routes.rb должен быть определен как:

devise_for :users, controllers: { registrations: 'registrations' }

Ответ 3

Я попробовал ту же настройку, что и вы здесь, но это сработало для меня. Я загрузил приложение в github (я также загрузил журнал, чтобы вы могли видеть, что он действительно работает).

Двойная проверка возможных опечаток. Возможно, вы забыли множественное число, или есть опечатка имени класса.

Ответ 5

Если вы создавали представления Переместить файлы вида

Я предполагаю, что вы уже используете rails generate devise: views генерирует созданные представления. Перемещение представлений/создание/регистрация папки для просмотров/пользователей , Я думаю, вы также должны изменить _path в формах

Ответ 6

Делайте rails routes и проверяйте ваши маршруты в config/routes вас может быть опечатка в ваших маршрутах

Вместо registrationS#new вас может быть что-то вроде registration#new.