devise overriding registrations controller - uninitialized constant Users::RegistrationsController

◇◆丶佛笑我妖孽 提交于 2019-11-30 01:19:30

问题


I'm trying to override some the functionality of the default devise registrations controller so that only certain users can create accounts for others. So in a file called registrations_controller.rb under the controllers/users folder I have the following

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

and in my routes file I have

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

When I try to go to the users/sign_up url I get a a routing error 'uninitialized constant Users::RegistrationsController'.

So what is really weirding me out about this is that I had used pretty much exactly the same functionality in a rails 3 app without a problem. I had a look at some of the other stackoveflow questions similar to this and I'm still none the wiser. The app I'm building now is a rails 3.1 app and I'm using devise 1.5.1

Here are the relevant routes it case they useful

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:


I would say, there's something wrong at your filename.

Your file should be called users/registrations_controller.rb

That works for me.




回答2:


Where was your registrations_controller.rb saved to? The location is important. I found that I was making a mistake saving it to app/controllers/devise/.. It simply needed to be saved in app/controllers/. e.g.:

app/controllers/registrations_controller.rb


Also, config/routes.rb route should be defined as:

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




回答3:


I tried the same setup that you put here but it worked for me. I uploaded the application to github (I uploaded the log as well, so you can see that it really worked).

Double check for possible typos. Maybe you forgot a plural or there is a typo on a Class name.




回答4:


Hi I just recently added first name and last name to my registration. I am using Rails 4.

I used the following instructions/tutorial to get this done:

http://www.jacopretorius.net/2014/03/adding-custom-fields-to-your-devise-user-model-in-rails-4.html.

:)




回答5:


If you has been generate the views Move view files

I assume you already use rails generate devise:views generated devise views. Move views/devise/registrations folder to views/users , I think you also you should change the _path in the forms




回答6:


Do rails routes and check your routes in config/routes you might have a typo in your routes.

Instead of registrationS#new you might have something else like registration#new.



来源:https://stackoverflow.com/questions/8466822/devise-overriding-registrations-controller-uninitialized-constant-usersregis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!