4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Deviseにユーザーネームを追加する方法

Posted at

初めての投稿です。Deviseにユーザーネームを追加する方法ということでrailsを触っている方なら知っている方も多いと思われますが、自分が分からなくなってしまっていた部分だったので改めてまとめてみました。

#1 Deviseのインストール
まず、RailsにDevise Gemをインストールします。

Gemfile
    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を追加するフォームがないためそれを追加します。

app/views/devise/registrations/new.html.erb
    <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では、初期状態で許可されたパラメータのみをストロングパラメータとして設定してあるため、任意で設定したパラメータはこのメソッドを用いて追加する必要があります。

app/controllers/application_controller.rb
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を外部キーに設定してアソシエーション(紐付け)するなどして参照するようにします。これについては別記事で書こうと思います。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?