今回こまったこと
devise gemをbundle installして、アカウントを登録。
作ったアカウントを編集する画面を作ったものの、内容が反映されない・・・どうすれば!?
と、言う事でググったら解決できたのでまとめます。
事前準備
devise用のuserテーブルには、カラムを追加してます。
name
ユーザー名
text
プロフィールコメント
prof_image
プロフィール画像
↓コントローラーにお決まりの一文
このif: :devise_controller?
は、どうやら、deviseコントローラーで処理をしているかどうか。を判断するヘルパーメソッドみたいです。
ので、before_actionに記述して、ApplicationControllerの処理の前に、判別しているっぽいです。
↓protected配下にこれまたお決まりの一文。
devise
にもともと用意されていない「:name,:prof_image,:text」の3つのテーブルへ書き込みを許可するぜ。って書いてあげてます。
これについては、sing_upの処理で許可するよ。って書かれてます。※今回はここの理解が甘かった。
編集したプロフィールが反映されない問題
プロフィール詳細画面を作成して、ここから編集画面へ遷移するような導線を用意しました。で、以下がプロフィール編集画面です。ここの「更新」ボタンを押しても反映されない・・・!なぜ?
↓プロフィール編集画面(つっこみどころ満載ですが、ゆるしてください。レイアウトも作成中です(汗))
なぜ?仮定
エラーは出ないし、きっとコントローラーに記載されている処理が何か足りていない。と仮定。
それならばと思い、コントローラーの記載を確認。むむむ・・・今の自分の知識じゃ訳がわからない・・・。
ということで、ぐぐる。
どうやら、「devise_parameter_sanitizerメソッド」の理解が足りていなかったようだ!
少しでもいいから、devise_parameter_sanitizerメソッドのこと思い出してください
この一文は僕が昔大好きだったゲームの一文のパロです。
はい、どうでもいいです。ごめんなさい。
調べていったら、「devise_parameter_sanitizerメソッド」の引数部分の指定不足が原因だと言う事がわかりました。
###そもそもdevise_parameter_sanitizerメソッドとは
deviseではサインアップ時に既存で用意されているカラムemail
とpassword
のみを受け取るようにストロングパラメーターで設定してあります。
なので、独自で追加したカラムへのアクセス許可をしてあげる必要があります。
そこで登場するのが、このdevise_parameter_sanitizer
メソッドです。
このdevise_parameter_sanitizer
メソッドには、第一引数で**どのアクションの時に許可する?**が指定できるみたいです。
第一引数書く値 | 意味 |
---|---|
:sign_in | ログイン時 |
:sing_up | 新規登録時 |
:account_update | レコード更新時 |
原因と解決
つまるところ、現状の実装だとApplicationController
にはsing_upの処理が走ったタイミングでしか追加したカラムの書き込みを許可していないって事になりますね。
なので実装を修正。
はい。これで無事更新ができるようになりました!!
##おわり
初の個人アプリ開発もエラー→ググる→トライ→エラー→ググる・・・・・解決!が定着化してきました。
色々な記事を投稿してくださっている先輩方には感謝しかありません!
僕も先輩方と同じように後からエンジニアを目指す人たちの助け舟を出せるような人に育っていきたいです。
あと、補足や認識齟齬があればどうぞご指摘いただけますと幸いです!
自分の知識を正しいものにしていきたいので、是非ともよろしくお願いいたします。
ではでは、ありがとうございました!