Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 379
Luis Crespo Avatar asked Oct 03 '14 18:10

Luis Crespo


People also ask

Does devise work with Rails 7?

That should do it! Our out-of-the box Devise setup is now working with Rails 7.

What is devise gem?

Devise is the cornerstone gem for Ruby on Rails authentication. With Devise, creating a User that can log in and out of your application is so simple because Devise takes care of all the controllers necessary for user creation ( users_controller ) and for user sessions ( users_sessions_controller ).


3 Answers

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.

like image 83
Luis Crespo Avatar answered Oct 07 '22 19:10

Luis Crespo


To answer the OP's original question of "Does anyone knows why?"

The problem is that this generator is currently only available on Devise's master branch, as stated on this GitHub issue.

If you want to use this feature before it's published, you could add this to your Gemfile:

gem 'devise', git: 'https://github.com/plataformatec/devise'
like image 33
sealocal Avatar answered Oct 07 '22 18:10

sealocal


https://github.com/plataformatec/devise/wiki/Tool:-Generate-and-customize-controllers

You can run this command in your terminal.

bash <(curl -s https://raw.githubusercontent.com/foohey/cdc/master/cdc.sh)
like image 34
Joel Avatar answered Oct 07 '22 18:10

Joel