user_idをaddress_userテーブルに保存させたい
保存までは上手くできたのですが、データの内容を見て見るとaddress_users内のuser_idがNULLになってしまっていました。
Rails6を使用してuser情報とaddress_user情報を一度に保存するウィザード機能を作成しています。
userモデルとaddress_userモデルはuserモデルを親とした、一対一のアソシエーションを組んでいました。
該当のソースコード
class Sellers::RegistrationsController < Devise::RegistrationsController def new @seller = Seller.new end # POST /resource def create @seller = Seller.new(sign_up_params) unless @seller.valid? render :new and return end session["devise.regist_data"] = {seller: @seller.attributes} session["devise.regist_data"][:seller]["password"] = params[:seller][:password] @address = @seller.build_address_seller render "address_sellers/new" end private def address_params params.require(:address_seller).permit(:postal_code, :area, :city, :block_number, :phone_number, :house_number) end class AddressSellersController < ApplicationController def new end def create @seller = Seller.new(session["devise.regist_data"]["seller"]) @address = AddressSeller.new(address_params) unless @address.valid? render :new and return end num = @seller.save @address.save(seller_id: num.id) session["devise.regist_data"]["seller"].clear sign_in(:seller, @seller) redirect_to :root end def address_params params.require(:address_seller).permit(:postal_code, :area, :city, :block_number, :phone_number, :house_number) end end
試したこと
num = @seller.save @address.save(seller_id: num.id)
と記述し、idを取得しようとしたのですが
NoMethodError in AddressSellersController#create
undefined method `id' for false:FalseClass
というエラーが出てしまいました。
binding.pryでデータが入っていないのか確認しましたが
pry(#<AddressSellersController>)> num = @seller.save
(0.4ms) BEGIN
↳ (pry):2:in create' Seller Exists? (0.9ms) SELECT 1 AS one FROM
sellersWHERE
sellers.
email= BINARY 'momo@momo' LIMIT 1 ↳ (pry):2:in
create'
(0.2ms) ROLLBACK
↳ (pry):2:in `create'
=> false
[3] pry(#<AddressSellersController>)> puts num
false
=> nil
nilとでてしまいました。
解決策を教えていただければ幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/13 06:26