Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

devise カラム追加後のregistration機能の実装

解決したいこと

deviseを用いてユーザー管理機能を実装しています。
deviseにカラムを追加してデータベースに保存をしたいのですが、追加したカラムが登録することができません。registrations_controllers以下のconfigure_sign_up_paramsメソッドにカラムを追加するよう記載したのですが機能しませんどのような解決策があるでしょうか?

※初めての質問の為至らない所ありましたら申し訳ありません。

発生している問題・エラー

Unpermitted parameters: :name, :code, :post_code, :address, :day_of_week_1_id, :day_of_week_2_id

該当するソースコード

registrations_controllers.rb
class OrderUsers::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  before_action :configure_account_update_params, only: [:update] 
registrations_controllers.rb
def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :post_code, :address,      :day_of_week_1_id, :day_of_week_2_id])
end

自分で試したこと

上記の箇所に問題があると思い記載したのですが、このメソッドが作動していないのか、作動しているが機能していないのかもわかりません。ご回答いただけると幸いです。

0 likes

2Answer

エラーの内容から察するに、Controllerに送るparamsの値が:sign_upでネストされていないように見えます。viewの内容が記載されていないので詳しくはわかりませんが。

ちなみに老婆心ながら、質問文に誤字脱字や句読点の欠落がある、または明らかに不自然な文章は、大抵質問の質も悪いと多くのプログラマーは経験的に知っており相手にしない可能性が高いです。質問文を分かりやすく端的に書くように気を付けると回答を早く貰えるようになるかもしれません。

0Like

ご回答いただきありがとうございます。
さまざまな事を教えていただきありがとうございます。次回から答える側への配慮もしていきたいと思います!

アンサーに対する質問なのですが、:sign_upでネストされていないということはルーティングにsign_upの記載が無いことが原因なのでしょうか?ご回答いただけたら幸いです。

routes.rb
Rails.application.routes.draw do
  devise_for :order_users
end
view/order_users/registrations/new.html.erb
<%= form_with model: @order_user, url: order_user_registration_path, class: 'registration-main', local: true do |f| %>
<div class="form-wrap">
  <div class="form-header">
    <h1 class="form-header-text">
      会員情報入力
    </h1>
  </div>

  <div class="form-group">
    <div class="form-text-wrap">
      <label class="form-text">名前</label>
      <span class="indispensable">必須</span>
    </div>
    <%= f.text_area :name, class:"input-default", id:"order_user_name", placeholder:"例)KEYCOFFEE ONLINE" %>
    <p class='info-text'>取引先様名をご登録ください</p>
  </div>
  <div class="form-group">
    <div class="form-text-wrap">
      <label class="form-text">メールアドレス</label>
      <span class="indispensable">必須</span>
    </div>
    <%= f.text_area :email, class:"input-default", id:"order_user_email", placeholder:"例)keycoffee@keycoffee.co.jp" %>
    <p class='info-text'>PC・携帯どちらでも登録可能です</p>
  </div>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">パスワード</label>
      <span class="indispensable">必須</span>
    </div>
    <%= f.password_field :password, class:"input-default", id:"order_user_encrypted_password", placeholder:"半角英数8桁以上" %>
    <p class='info-text'>半角数字と半角英字の両方を含めた8桁以上でご設定ください</p>
  </div>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">パスワード(確認用)</label>
      <span class="indispensable">必須</span>
    </div>
    <%= f.password_field :password_confirmation, class:"input-default", id:"order_user_password-confirmation", placeholder:"半角英数8桁以上" %>
    <p class='info-text'>再度パスワードをご入力ください</p>
  </div>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">お客様コード</label>
      <span class="indispensable">必須</span>
    </div>
    <%= f.text_area :code, class:"input-default", id:"order_user_code", placeholder:"10桁の半角数字" %>
    <p class='info-text'>担当者よりご案内された10桁のお客様コードをご入力ください</p>
  </div>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">郵便番号</label>
      <span class="indispensable">必須</span>
    </div>
    <%= f.text_area :post_code, class:"input-default", id:"order_user_post_code", placeholder:"例)111-1111" %>
    <p class='info-text'>半角ハイフンを含めた7桁の数字でご登録ください</p>
  </div>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">住所</label>
      <span class="indispensable">必須</span>
    </div>
    <%= f.text_area :address, class:"input-default", id:"order_user_address", placeholder:"例)東京都港区西新橋2丁目34-4" %>
    <p class='info-text'>※建物名まで詳しくご入力ください</p>
  </div>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">納品曜日</label>
      <span class="indispensable">必須</span>
    </div>
    <%= f.collection_select(:day_of_week_1_id, DayOfWeek1.all, :id, :name, {}, {class:"select-box", id:"order_user_day_of_week_1_id"}) %>
    <p class='info-text'>担当者よりご案内された曜日をご登録ください</p>
  </div>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">納品曜日</label>
    </div>
    <%= f.collection_select(:day_of_week_2_id, DayOfWeek2.all, :id, :name, {}, {class:"select-box", id:"order_user_day_of_week_2_id"}) %>
    <p class='info-text'>担当者より納品曜日を2回案内された場合、ご登録ください</p>
  </div>
  <div class="registrations-btn">
    <%= f.submit "会員登録" ,class:"register-btn" %>
  </div>
<% end %>
</div>

※application_controller.rbに以下の記載をした所、正常に作動したのですが、2パターンのユーザーを作りたい為、registrations_controller.rbの記載で正常に作動するようにしたいです。ご回答いただけると幸いです。

application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_sign_up_params, if: :devise_controller?

  private
  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :code, :post_code, :address, :day_of_week_1_id, :day_of_week_2_id])
  end
end
0Like

Your answer might help someone💌