初めての投稿です。Deviseにユーザーネームを追加する方法ということでrailsを触っている方なら知っている方も多いと思われますが、自分が分からなくなってしまっていた部分だったので改めてまとめてみました。
#1 Deviseのインストール
まず、RailsにDevise Gemをインストールします。
gem 'devise' #追加
$ bundle install
$ cd [railsアプリケーションのフォルダ]
$ rails g deivse:user # usersテーブル作成
$ rails g deivse:views # deviseの編集用ビューファイル作成
#2 データベースにカラム追加
マイグレーションファイル作成。マイグレートしてデータベースに登録。
$ rails g migration AddUsernameToUsers username:string
$ rails db:migrate
#3 ビューファイル編集
デフォルトのビューファイルにはusernameを追加するフォームがないためそれを追加します。
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<%# 以下を追加する %>
<div class="field">
<%= f.label :username %><br />
<%= f.text_field :username, autofocus: true %>
</div>
<%# ここまで %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
<div class="field">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "new-password" %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
</div>
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
#4 configure_permitted_parametersメソッド
deviseでは、初期状態で許可されたパラメータのみをストロングパラメータとして設定してあるため、任意で設定したパラメータはこのメソッドを用いて追加する必要があります。
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
end
以上でdeviseをカスタマイズしてusernameを追加する方法について説明しました。もちろんこれ以外のパラメーターを任意に設定する際の手順も同じです。
また、そのパラメーターを参照する際には、deviseのuser_idを外部キーに設定してアソシエーション(紐付け)するなどして参照するようにします。これについては別記事で書こうと思います。