Search code examples
ruby-on-railsdevise

Rails Generate Devise:Controllers not Working


Simple question.

I'm using Rails 4.1.4 and Devise 3.3.0 for my app.

I'm trying to generate Devise's controllers so I can override some behaviour.

Documentation says to run...

rails generate devise:controllers [scope]

... to generate controllers under app/controllers/scope so you can then modify them. But when I run the previous command it keeps saying that there is no generator devise:controllers:

Could not find generator devise:controllers.

Does anyone knows why?.

Thanks.

UPDATE

In fact, when I run...

rails generate

... to retrieve a list of the available generators, I get the following output for Devise generators:

Devise:

devise

devise:install

devise:views

So definitelly, the devise:controllers generator isn't there. Is there a way to add it?. How?.

Thanks.


Solution

  • SOLVED

    I've just created the controller manually and make it inherit from Devise. For example:

    class Users::RegistrationsController < Devise::RegistrationsController
        # Override the action you want here.
    end
    

    This controller should live in app/controllers/users/registrations_controller.rb. If you have any other scope just go with app/controllers/scope/registrations_controller.rb. For example if you have an admin scope it would be app/controllers/admins/registrations_controller.rb.

    Best.

    UPDATE

    Following the comment from blushrt, I forgot to mention that it is important to modify config/routes.rb to make Devise use the created controller for the specific resource. For example, for users, you should put in your config/routes.rb:

    devise_for :users, controllers: { registrations: "users/registrations" }
    

    That's it. Best.