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.