RailsのDevise 認証でのユーザー情報更新ページ(users/edit)で、独自に追加した name フィールドを更新する

Devise::RegistrationsController#edit → Devise::RegistrationsController#update のアクションにおける、ユーザー情報更新の際に、独自に追加したフィールドを編集して更新できるようにします。

Rails4 Devise でサインアップ用のユーザー登録フォームに、独自の入力フィールドを追加する | EasyRamble で、ユーザー登録フォームにnameフィールド(名前入力の項目)を追加しました。

今回は、この追加したnameフィールド(名前)を、/users/edit(edit_user_registration_path)のページから、編集して更新できるようにします。

— 環境 —
rails 5.0.0.1
devise 4.2.0

【追記 2016/11/22】
Devise 4 では Strong Parameters の API が変更されましたので、その点について追記を行いました。
【追記ここまで】

スポンサーリンク

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

ユーザー情報更新ページのビューを編集

まずは、以下のように name フィールドをビューに追加。事前に、Rails で Devise のビューを作成してカスタマイズ | EasyRamble を参考にして、カスタマイズ用のビューを作成しておきます。

app/views/users/registrations/edit.html.erb

これで、さあできた楽勝楽勝と思って、テストやブラウザで試しましたところ、name フィールドの更新ができず少々はまりました。

strong parameters での :account_update で許可するパラメータを追加

strong parameters だなと見当をつけて、Devise のソースを眺めましたところ…以下のコードを発見。

app/controllers/devise/registrations_controller.rb

Devise::RegistrationsController の最後で、:account_update のアクションでのサニタイズを行っています。ということで、Rails の認証プラグイン Devise での Strong Parameters について | EasyRamble を参考に、以下のように strong parameter でのパラメータ許可を設定します。

Devise 4 の場合の Strong Parameters 設定

Devise 4 では、devise_parameter_sanitizer.permit メソッドを使います。

app/controllers/application_controller.rb

Devise 3 の場合の Strong Parameters 設定

Devise 3 の場合の書き方は以下。

app/controllers/application_controller.rb

これでユーザー情報を更新できるようになり、テストも全て通過。ぐぐったら以下の stackoverflow のページも見つけました。

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

Leave Your Message!