アラフォーがお金持ちになるためエンジニアになったブログ

お金も根性も学歴もないアラフォーまきのがエンジニアになってお金持ち目指すよ!

【 Railsメモ】devise + サインアップ時に登録パラメータ追加済み+利用規約にチェックしてほしい

どうも、アラフォーまきのです。
タイトル長いw



さて、アプリが形になってきたので利用規約を作りたくなったのです。



なもんで、いろいろ調べたらなんとかなったのでメモ。

1:只今の状況

・Rails 5.2.2

・devise入っててログイン系は実装済み

・サインアップ時、名前も入れられるように追加してある。
 これのおかげでひっかかった。

・deviseの日本語化もしてある(カラム以外)



※devise全体的に以下の投稿がめちゃくちゃ重宝した。
お名前の追加も終盤にある記述に救われた。

qiita.com


※日本語化はこちらに救われた

qiita.com


※利用規約の文言はこちらを参考にした

kiyaku.jp


2:見よう見まねでレッツ実装

参考になったのがこちら
qiita.com


「よくわからないコードは書くな」というけれど、何はともあれとにかく書いてやってみることにw




本当に、このまんま、コピペよろしくゴリゴリ書いていった。


3:エラー

とりあえず参考にした投稿通りに書いていった結果、こんなんが出た

NoMethodError in Devise::SessionsController#new

undefined method `concat' for #<Proc:0x00007f9854cb9370>

Devise::SessionsController#newは、deviseのサインアップの部分だ。




だけどconcatがそもそもなんや、という状況なので調べた。


4:concatさん

以下によると、今ある配列に要素を追加する的な。

<< とかpushと同じような感じなのかな?
1つ1つではなく、まとめて追加できるぜ、的な?


ref.xaio.jp


そんなこんなで、どうも「ストロングパラメータの書き方がイヤ!」と言われているようだと気が付いた。

5:こうしたらできた


参考記事の「ストロングパラメータを追加」の部分を書き換えてみたらうまくいった!


【ダメコード】

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) { |u| u.permit(:email, :password, :password_confirmation, :accepted)}
  end


【イイコード】

def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :name, :accepted)}
  end


keys: [:name]の部分ですな。



この【イイコード】の書き方で、ちゃんとお名前の登録もできつつ、チェックボックにチェック入れないと「チェックしてよ」とエラー出るし、チェックすればちゃんとサインアップできた!やったー!





でも実は、恥ずかしながらどうしてこう書かねばならんかったかのかは、ちゃんと説明できるほどの理解ができていないので根本的な解決になっていない。





配列的にいかんでしょ、ということらしい気がするけれど、まだ知識が足りておらず。くやしいので後ほどまた調べてみる。