Rails Deviseでサインアップ用のユーザー登録フォームに、独自の入力フィールドを追加する

Rails の認証プラグインである Devise では、デフォルトでのサインアップ用のユーザー登録フォームは、Eメール、パスワード、パスワード確認が入力項目となっています。これに、nameフィールド(名前入力の項目)を追加したい。割と簡単に追加できます。

— 環境 —
Rails 5.0.0.1
Devise 4.2.0

【追記 2016/11/08】
Devise 4 における Strong Parameters の Parameter Sanitizer API が変更されていたので、Devise 4 環境での Strong Parameters によるパラメータ許可の書き方について追記しました。

Rails の認証プラグイン Devise での Strong Parameters について | EasyRamble
https://github.com/plataformatec/devise
【追記ここまで】

— 記事初回公開時の環境 —
Rails 4.0.1
Devise 3.2.2

スポンサーリンク

マイグレーションでDBテーブルにフィールドを追加

新たに、name フィールドをDBテーブルに追加するマイグレーションを作成。

db/migrate/***_add_name_to_users.rb

私の場合、Rails4 で Devise と OmniAuth で、Twitter/Facebook のOAuth認証と通常フォームでの認証を併用して実装 | EasyRamble で name フィールドをすでに追加していたので、name フィールドに :string, null: false, default: “” のオプションを追加するマイグレーションを行いました。name フィールドは、入力必須で重複OKなフィールドにします。(ユニークキーは付けない。)

いったんDBをリセットして、usersテーブルのレコードを削除。name を null: false, default: “” に変更するので、レコードが残っているとマイグレートでエラーが起きます。(development 環境です。)

マイグレーション作成。

db/migrate/***_change_name_options_to_users.rb

rake db:rollback で戻せるように、up と down を各々明示的に定義します。

name をユニーク(一意)にしたい場合は、インデックスとユニークキーもマイグレーションに追加します。

マイグレート。

データベース確認。

name の Null が NO に、Default が “” に変更されました。

ユーザー登録フォームのビューに name 用の入力フィールドを追加

app/views/users/regsitrations/new.html.erb

name フィールドを許可する strong parameters の設定(Devise 4)

Devise 4 では、パラメータを許可するための API が変更されています。Devise 4 において、:sign_up で :name を許可する例です。

app/controllers/application_controller.rb

name フィールドを許可する strong parameters の設定(Devise 3)

:sign_up で :name を許可します。

app/controllers/application_controller.rb

User モデルでの validation

name フィールドは、入力必須で50文字以内にします。DBでユニークキー制約は付けずに、name の重複は許可しています。

app/models/user.rb

以上で、サインアップ用のユーザー登録フォームに name という入力フィールドを追加できました。必要に応じて、edit ビューなども編集。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!