rails 購入機能(1つのフォームから複数のカラムに保存をする。)
解決したいこと
メルカリのようなWebアプリをつくっています。
購入フォームの情報を保存の実装中にエラーが発生しました。
newアクションを使わず、index一覧画面から入力をしてcreateをするフォームを作成中です。
→一つのファームから2つのモデルのカラムに保存をする実装をしてます。
ログイン、ログアウト機能には、deviseを使っています。
発生している問題・エラー
ActionController::ParameterMissing in OrdersController#create
param is missing or the value is empty: shipping_adress
該当するソースコード(routes.rb)
Rails.application.routes.draw do
devise_for :users
root to: 'items#index'
resources :items do
resources :orders, only: [:index, :create]
end
end
該当するソースコード(OrdersController)
class OrdersController < ApplicationController
def index
@shipping_address = ShippingAddress.new
@item = Item.find(params[:item_id])
end
def create
@item = Item.find(params[:item_id])
@shipping_address = ShippingAddress.new(address_params)
if @shipping_address.valid?
@shipping_address.save
redirect_to action: :index
else
render action: :new
end
end
private
def address_params
params.require(:shipping_adress).permit(:zip_code, :prefecture_id, :city,
:address, :building, :tel_number).merge(user_id: current_user.id, item_id: params[:item_id])
end
自分で試したこと
params.require(:shipping_address)のshipping_addressが空だと言われているのですが、送信されたパラメータがshipping_addressの中に入っていないのか、、なぜ空になっているかはわかりません。
permitの中たちのものも、shipping_adressのモデルのカラム名と一致しています。
indexの定義が間違っているのでしょうか?
先月から学習を始めてたばかりの初学者で、昨日から悩み、誤りが探し出すことが出来ましたでした。他にも間違っている箇所があるかと思いますが、アドバイス宜しくお願いいたします。
0