####ウィザードフォーム形式の新規登録画面の実装です。最後の入力画面の送信ボタンでまとめてUsersテーブルとAddressesテーブルに入力内容を保存したいです。
発生している問題・エラーメッセージ
ActionController::ParameterMissing in Users::RegistrationsController#create param is missing or the value is empty: user
/users/registrations_controller.rb class Users::RegistrationsController < Devise::RegistrationsController before_action :user_params, only: [:create] def step_1 @user = User.new end def step_2 session[:user_params] = user_params end def step_3 @user = User.new @user.build_address end def create @user = User.new(session[:user_params]) @user.build_address if @user.save redirect_to payment_methods_path else render :user_information end end private def user_params params.require(:user).permit( :nickname, :email, :password, :password_confirmation, address_attributes: [:id, :last_name, :first_name, :last_name_kana, :first_name_kana, :postal_code, :prefecture, :city, :address, :building_name, :phone_number]) end end
このstep_3でcreateアクションを実行しようとした際にエラーが出ます。
haml
1/users/registrations/step_3 2 3= form_with model: @user, url: '/users', method: :post, local: true do |f| 4 = fields_for :address do |a| 5 = a.text_field :last_name 6 = a.text_field :first_name 7 8 = a.text_field :last_name_kana 9 = a.text_field :first_name_kana 10 11 = a.text_field :postal_code 12 13 = a.select :prefecture, Address.prefectures.keys, {} 14 15 = a.text_field :city 16 17 = a.text_field :address 18 19 = a.text_field :building_name 20 21 = a.telephone_field :phone_number 22 23 = f.submit
試したこと
binding.pryで色々中身など確認しつつみていったところコントローラーのcreateアクション内の二行目の@user.build_addressで@userが上書きされてしまってるのではないかと思っています。
ただこの記述方法で作成されていた方の記事をほぼ丸パクリで書いたのですがなぜかエラーになってしまいました。
これ以上冗長になると返っていやかと思ったので他の箇所のコードは載せていないので解決に必要ならば載せますのでよろしくお願いします。
補足情報
ruby 2.5.1
Rails 5.2.3
回答2件
あなたの回答
tips
プレビュー