denisov_2023
@denisov_2023 (デニソフ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

DBに新規登録内容を保存したい

Q&A

Closed

解決したいこと

DBに新規登録内容を保存したい

プログラミング初心者です。
deviseを用いて new.html.erb 内でユーザー登録を行う際
エラー等のメッセージはウェブ上にされませんが、
form画面内に記述した内容がDB(sequelpro)にデータが保存されません。
ターミナル上には
エラーメッセージ.png

Unpermitted parameters: :profile, :occupation, :position

と表示があります。
下記の new.html.erb の表示画面にて、ユーザー登録を行います。

new.html.erb
<div class="main">
  <div class="inner">
    <div class="form__wrapper">
      <h2 class="page-heading">ユーザー新規登録</h2>

        <%# 「モデル名」にはUserモデルであれば@userを渡しましょう。%>
        <%# 「新規登録機能へのパス」は、devise導入後にrails routesを実行してdevise/registrations#createへのパスを確認し、記載してください。 %>
        <%= form_with model:@user, url:user_registration_path, method: :post, local: true do |f| %>

        <div class="field">
          <%= f.label :email, "メールアドレス" %><br />
          <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
        </div>

        <div class="field">
          <%= f.label :password, "パスワード(6文字以上)" %><br />
          <%= f.password_field :password, autocomplete: "new-password" %>
        </div>

        <div class="field">
          <%= f.label :password_confirmation, "パスワード再入力" %><br />
          <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
        </div>

        <div class="field">
          <%= f.label :name, "ユーザー名" %><br />
          <%= f.text_field :name %>
        </div>

        <div class="field">
          <%= f.label :profile, "プロフィール" %><br />
          <%= f.text_area :profile, class: :form__text %>
        </div>

        <div class="field">
          <%= f.label :occupation, "所属" %><br />
          <%= f.text_area :occupation, class: :form__text %>
        </div>

        <div class="field">
          <%= f.label :position, "役職" %><br />
          <%= f.text_area :position, class: :form__text %>
        </div>

        <div class="actions">
          <%= f.submit "新規登録", class: :form__btn  %>
        </div>
      <% end %>
    </div>
  </div>
</div>
application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end

自分で試したこと

ターミナル上のメッセージ

Unpermitted parameters: :profile, :occupation, :position

とあるので、:profile, :occupation, :positionを
devise_parameter_sanitizer.permit
の中に入れてあげれば良いのではないか?

devise_parameter_sanitizer.permit(:sign_up,:profile, :occupation, :position, keys: [:name])

としました。

→結果
エラー:ArgumentError in Devise::RegistrationsController#new
    wrong number of arguments (given 4, expected 1)

以下参考にあるようにdevise_parameter_sanitizer.permit内にはデバイスの処理を記述するため、この書き方は間違っていると思われます。

解決にご協力頂けないでしょうか。
よろしくお願い申し上げます。

参考
https://qiita.com/kaito121855/items/e1a80da8557258c497dc

0

1Answer

お騒がせいたしました。解決しました。

devise_parameter_sanitizer.permit(:sign_up,:profile, :occupation, :position, keys: [:name])

devise_parameter_sanitizer.permit(:sign_up, keys: [:name,:profile, :occupation, :position])

とすることで解決されました。

keys:[]内に許可するkeyを入れるので、当部分に:profile, :occupation, :positionを入れるkとで、これらが許可されます。
非常に単純なことでした。
お騒がせいた際まして、申し訳ございません。

0Like

Your answer might help someone💌