devise を導入②
deviseを導入 の続き。
前回、以下のコマンドで作成したマイグレーションファイルには名前などのカラムがないため、任意のカラムを追加する。
rails generate devise MODEL
以下のコマンドを実行してマイグレーションファイルを作成。
rails generate migration AddColumnsToUser
作成されたマイグレーションファイルを以下のように修正。カラム名は適宜追加したい名前に変更する。not null制約をつけるかつけないかも任意。
def change
add_column :users, :first_name, :string, null: false
add_column :users, :last_name, :string, null: false
end
以下のコマンドを実行。
rails db:migrate
すでにデータを作成している場合は以下のコマンドを実行する。
rails db:migrate:reset
登録時に氏名も登録させたいため、カスタム用のviewを作成する。以下のコマンドを実行。
rails generate devise:views
作成された views/devise/registrations/new.html.erb ファイルを修正する。今回は first_name と last_name を追加したので以下のように修正。
<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 :first_name %><br />
<%= f.text_field :first_name, autofocus: true, autocomplete: "first-name" %>
</div>
<div class="field">
<%= f.label :last_name %><br />
<%= f.text_field :last_name, autofocus: true, autocomplete: "last-name" %>
</div>
...
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
first_name と last_name が表示されていれば成功。
このままでは登録に失敗してしまう。なぜなら、deviseは任意で追加したカラムをストロングパラメータで許容していないからである。
氏名のカラムを追加したため、ストロングパラメータを修正し、任意のパラメータを許容する。application_controller.rb に以下を追加する。
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name])
end
以下のように値を入力し、Sign up のボタンを押す。
任意のページにリダイレクトされたら成功。
次に続く。
この記事が気に入ったらサポートをしてみませんか?