railsでwebappを作る時にログインのあれこれを作るのに
gem deviseを使うことがあると思います。
僕はgem deviseにめっちゃ助けてもらっていたのですが
突然現れた
「undefind method'for'for・・・・・・・・・・・・・・・・・」
????????????????
これは何?
なんかやってしまったのか?
自分の書いたコードを見直して
それっぽいものを調べること1h以上
全く見当たらない
ふと見たgemfile.lock
deviseのバージョンが違う??????
過去に作ったwebappのdeviseのバージョンを見ると(3.5.6)
エラーが出ている方のバージョンは(4.2.0)
「おっ??これは?」
必殺!google検索!!
rails devise 4.0
すると、
どうやら今までの記述だとエラーが出るらしい
今までの記述
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :name
end
nameのカラムを追加するとこんなことを書いていたと思います。
これだとさっきのエラーが出るらしい
で、じゃあどう書いたらいいかって話なんですが
devise_parameter_sanitizer.permit(:sign_up){|u|
u.permit(:◯◯◯◯)}
こんな感じに変えなきゃいけないらしくて
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up){|u|
u.permit(:name)}
end
じゃあこれでいけるや
と思ってやってみると
今度は
emailとpasswordが空じゃけぇ入力せんか!
と、おっしゃるわけですよ?
は?入れてっけど。。。。。(−_−#)
何度試しても同じ。。。。
そろそろ、ふざけてるとぶっ壊すぞ!!
💡
もしかして
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up){|u|
u.permit(:email, :name, :password, :password_confirmation)}
end
emailもpasswordも書いてないといけないのか?
これで試してみると
正常に動くではないか!!!!!!!
正常に動いてくれたので一件落着です
一応、バージョンの情報を
rails 4.2.5.1
devise 4.2.0
====追記====
もっと短くかけることが分かったのでそれを追記して来たいなと。
devise_parameter_sanitizer.permit(:sign_up){|u|
u.permit(:email, :name, :password, :password_confirmation)}
()の中にフォームの全ての項目を書いていたわけなんですけど、
これって、deviseの登録内容を編集するとき、全てのフォームを埋めないと
編集を完了することができないんですよね。
クソ不便。
ってなわけで
devise_parameter_sanitizer.permit(:account_update, keys: [:name])
こう書けばデフォルトに追加した項目だけ書けばいい。
:account_updateは:sign_upに変えれば会員登録でも使える
こうしておけば全てのフォームを埋めなくても、変えたいものと今のパスワードを書けば
登録内容の編集もできる。