How to add fields to the Devise registration form
This post will show you how to add custom fields to your Devise registration form in Rails 5. For this example, we'll add a name
field.
-
Make sure you've added Devise, generated its views, and migrated your custom fields.
# generate Devise views rails generate devise:views # add custom fields rails g migration AddNameToUsers name:string db:migrate
-
Add a new controller at app/controllers/registrations_controller.rb. Make sure it inherits from
Devise::RegistrationsController
, and include your form fields insign_up_params
.class RegistrationsController < Devise::RegistrationsController private def sign_up_params params.require(:user).permit(:email, :password, :name) end end
-
Let's tell Devise to use this controller. In config/routes.rb:
devise_for :users, :controllers => { registrations: 'registrations' }
-
Add your field to app/views/devise/registrations/new.html.erb.
<div class="field"> <%= f.label :name %> <%= f.text_field :name %> </div>
That's all there is to it. You've added a custom field to your Devise registration form. And if you want to allow the user to edit this value too, you can add an account_update_params
method to your Registrations Controller and customize app/views/devise/registrations/edit.html.erb.