前提・実現したいこと
今某スクールのチーム開発にてフリマアプリの開発をしています。
ウィザード形式で登録するという形式にしており、使用しているgemはdeviseです。
userの新規作成ができていないのか、undefined method '[]' for nil:NilClass
がでます。
発生している問題・エラーメッセージ
該当のソースコード
registrations_controller (抜粋)
ruby
1def new 2 @user = User.new 3 end 4 5 def create 6 @user = User.new(sign_up_params) 7 unless @user.valid? 8 flash.now[:alert] = @user.errors.full_messages 9 render action: :new and return 10 end 11 session["devise.regist_data"] = {user: @user.attributes} 12 session["devise.regist_data"][:user][:password] = params[:user][:password] 13 @phone_number = @user.build_phonenumber 14 render :new_phone_number 15 end 16 17 def create_phone_number 18 @user = User.new(session["devise.regist_data"]["user"]) 19 @phone_number = PhoneNumber.new(phone_number_params) 20 unless @phone_number.valid? 21 flash.now[:alert] = @phone_number.errors.full_messages 22 render :new_phone_number and return 23 end 24 @user.build_phonenumber(@phone_number.attributes) 25 @address = @user.build_address 26 render :new_address 27 end 28 29 30 31 def create_address 32 @user = User.new(session["devise.regist_data"]["user"]) 33 @phone_number = PhoneNumber.new(session["phone_number"]) 34 @address = Address.new(address_params) 35 unless @address.valid? 36 flash.now[:alert] = @address.errors.full_messages 37 render :new_address and return 38 end 39 @user.build_address(@address.attributes) 40 @credit_card = @user.build_creditcard 41 render :new_credit_card 42 end 43 44 def phone_number_params 45 params.require(:phone_number).permit(:number) 46 end
new.html.haml (抜粋)
ruby
1.signUpNewInfo 2 .signUpNewInfoBox 3 %h2.signUpNewInfoBox__title 4 会員情報入力 5 = form_with model: @user, url: users_sign_up_phone_number_path, class: "Box", local: true do |f| 6 = render "devise/shared/error_messages", resource: @user
new_phone_number.html.haml(抜粋)
.signUpBox %h2.signUpBox__title 電話番号登録 = form_with model: @phone_number, url: users_sign_up_address_path, class: "phoneNumberForm",local: true do |f| = render "devise/shared/error_messages", resource: @phone_number
new_address.html.haml(抜粋)
ruby
1= form_with model: @address ,url: users_sign_up_credit_card_path, class: "deliveryAddressForm", local: true do |f| 2 = render "devise/shared/error_messages", resource: @address
routes.rb
ruby
1devise_scope :user do 2 get "users/sign_up/address", to: "users/registrations#new_address" 3 post "users/sign_up/address", to: "users/registrations#create_address" 4 get "users/sign_up/credit_card", to: "users/registrations#new_credit_card" 5 post "users/sign_up/credit_card", to: "users/registrations#create_credit_card" 6 get "users/sign_up/phone_number", to: "users/registrations#new_phone_number" 7 post "users/sign_up/phone_number", to: "users/registrations#create_phone_number" 8 get "users/sign_up/done", to: "users/registrations#done" 9 post "users/sign_up/done", to: "users/registrations#done" 10 end
試したこと
form_withのところで問題があるのではと思い、modelや参照先のurlを変えてみたりしましたが変わらず。
回答2件
あなたの回答
tips
プレビュー