LoginSignup
okuurt
@okuurt (徹 小山)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

rails 購入機能(1つのフォームから複数のカラムに保存をする。)

解決したいこと

メルカリのようなWebアプリをつくっています。
購入フォームの情報を保存の実装中にエラーが発生しました。
newアクションを使わず、index一覧画面から入力をしてcreateをするフォームを作成中です。
→一つのファームから2つのモデルのカラムに保存をする実装をしてます。
ログイン、ログアウト機能には、deviseを使っています。

発生している問題・エラースクリーンショット 2021-01-01 13.38.56.png

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

1Answer

OrdersController 内、 params.require(:shipping_adress) の adress は d が1個足りません。 address に直してください。


こういうバグを調査するときは params に期待通りのデータが入っているか確かめると問題を切り分けやすくなります。データの中身を見るには、 pry などのデバッガを使うこともできますが、手っ取り早く例外を投げる手もあります。

  def address_params
    # params の中身をエラー本文にした例外を投げれば、
    # ブラウザに表示されるエラー画面で params の中身が分かる
    raise params.inspect
  end
0Like

Comments

  1. @okuurt

    Questioner
    @uasiさん、アドバイスのおかげで解決することが出来ました。
    バグ調査のことも大変ありがたい情報です! ^^ 年始早々ありがとうござました。

Your answer might help someone💌