# Adding Custom Fields to Devise Before doing anything, please check the versions of the gem files: ```ruby gem 'rails', '~> 5.1.4' gem 'devise', '~> 4.4.0' ``` **Disclaimer** - This solution may not work with older versions of rails and devise. Versions listed above were the latest versions of gems which I was using at the time of creation and tests. (10 Jan 2018) ## Step 01: Install & Generate Devise If you do not know the install process, please visit [Getting Started part of Devise README.md](https://github.com/plataformatec/devise#getting-started) ## Step 02: Change code in devise.rb In order to visually see all the new fields and alterations of login, sign up etc pages, we need to first change the following code in: **__config/initializers/devise.rb__** ```ruby config.scoped_views = true ``` ## Step 03: Generate a migration file for model created with Devise **__bash__** ``` $ rails generate migration add_name_to_users name:string ``` ## Step 04: Check Migration file **__db/migrate/...._add_name_to_users.rb__** ```ruby class AddNameToUsers < ActiveRecord: :Migration def change add_column :users, :name, :string end end ``` ## Step 05: Migrate Database **__bash__** ``` $ rake: db:migrate ``` ## Step 06: Update code in ApplicationController Similar to permitting parameters, we need to create permitting parameters to devise model as well. **__app/controllers/application_controller.rb__** ```ruby class ApplicationController < ActionController: :Base protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:name, :email, :password)} devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:name, :email, :password, :current_password)} end end ``` ## Step 07: Register & Edit Users with custom fields Add new custom fields inside html.erb files. **__app/views/layout/index.html.erb__** ```ruby <%= link_to 'Edit Profile', edit_user_registration_path %> ``` **__app/views/users(or devise)/registrations/new.html.erb__** ```ruby
<%= f.label :name %>
<%= f.text_field :name, autofocus: true %>
``` **__app/views/users(or devise)/registrations/edit.html.erb__** ```ruby
<%= f.label :name %>
<%= f.text_field :name, autofocus: true %>
```