2
1

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.

【Rails】devise gemありきで、ユーザー情報を更新する方法

Last updated at Posted at 2020-03-17

今回こまったこと

devise gemをbundle installして、アカウントを登録。
作ったアカウントを編集する画面を作ったものの、内容が反映されない・・・どうすれば!?

と、言う事でググったら解決できたのでまとめます。

事前準備

devise用のuserテーブルには、カラムを追加してます。
name ユーザー名
text プロフィールコメント
prof_image プロフィール画像

↓こんな感じ
スクリーンショット 2020-03-17 13.24.28.png

↓コントローラーにお決まりの一文
スクリーンショット 2020-03-17 13.27.21.png
このif: :devise_controller?は、どうやら、deviseコントローラーで処理をしているかどうか。を判断するヘルパーメソッドみたいです。
ので、before_actionに記述して、ApplicationControllerの処理の前に、判別しているっぽいです。

↓protected配下にこれまたお決まりの一文。
スクリーンショット 2020-03-17 13.27.02.png
deviseにもともと用意されていない「:name,:prof_image,:text」の3つのテーブルへ書き込みを許可するぜ。って書いてあげてます。
これについては、sing_upの処理で許可するよ。って書かれてます。※今回はここの理解が甘かった。

編集したプロフィールが反映されない問題

プロフィール詳細画面を作成して、ここから編集画面へ遷移するような導線を用意しました。で、以下がプロフィール編集画面です。ここの「更新」ボタンを押しても反映されない・・・!なぜ?

↓プロフィール編集画面(つっこみどころ満載ですが、ゆるしてください。レイアウトも作成中です(汗))
スクリーンショット 2020-03-17 13.37.37.png

なぜ?仮定

エラーは出ないし、きっとコントローラーに記載されている処理が何か足りていない。と仮定。
それならばと思い、コントローラーの記載を確認。むむむ・・・今の自分の知識じゃ訳がわからない・・・。
ということで、ぐぐる。
どうやら、「devise_parameter_sanitizerメソッド」の理解が足りていなかったようだ!

少しでもいいから、devise_parameter_sanitizerメソッドのこと思い出してください

この一文は僕が昔大好きだったゲームの一文のパロです。
はい、どうでもいいです。ごめんなさい。

調べていったら、「devise_parameter_sanitizerメソッド」の引数部分の指定不足が原因だと言う事がわかりました。

###そもそもdevise_parameter_sanitizerメソッドとは

deviseではサインアップ時に既存で用意されているカラムemailpasswordのみを受け取るようにストロングパラメーターで設定してあります。
なので、独自で追加したカラムへのアクセス許可をしてあげる必要があります。
そこで登場するのが、このdevise_parameter_sanitizerメソッドです。

このdevise_parameter_sanitizerメソッドには、第一引数で**どのアクションの時に許可する?**が指定できるみたいです。

第一引数書く値 意味
:sign_in ログイン時
:sing_up 新規登録時
:account_update レコード更新時

原因と解決

つまるところ、現状の実装だとApplicationControllerにはsing_upの処理が走ったタイミングでしか追加したカラムの書き込みを許可していないって事になりますね。
なので実装を修正。

▼Before
スクリーンショット 2020-03-17 13.27.02.png

▼After
スクリーンショット 2020-03-17 13.53.53.png

はい。これで無事更新ができるようになりました!!

##おわり
初の個人アプリ開発もエラー→ググる→トライ→エラー→ググる・・・・・解決!が定着化してきました。
色々な記事を投稿してくださっている先輩方には感謝しかありません!
僕も先輩方と同じように後からエンジニアを目指す人たちの助け舟を出せるような人に育っていきたいです。

あと、補足や認識齟齬があればどうぞご指摘いただけますと幸いです!
自分の知識を正しいものにしていきたいので、是非ともよろしくお願いいたします。

ではでは、ありがとうございました!

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?