0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

param is missing or the value is empty が表示された時の対処法

Last updated at Posted at 2020-10-28

##解決したいこと
フォームの入力欄を入力後、送信ボタンを押すと、
param is missing or the value is empty と表示されること。

##エラー解決方法の結論
ストロングパラメーターのrequireオプションを消し、permitメソッドだけにすることで解決しました。

##エラー解決までの過程
###1 paramsの中身を確認した。

def create
     binding.pry
     @item_request = ItemRequest.new(item_params)
     @item_request.save
     redirect_to root_path
  end
private

  def item_params
     params.require(:item_request).permit(:name, :number, :store, :month_id, :day_id, :hour_id, :minute_id, :prefecture_id, :city, :house_number)
  end
end

上記のように、コントローラーファイルに、binding.pryと記述し、その後、フォームを再度送信した後、ターミナルで動作が止まるので、paramsと入力した。
すると、

"name"=>"j", "number"=>"j", "store"=>"j", "month_id"=>"4", "day_id"=>"6", "hour_id"=>"4", "minute_id"=>"3", "prefecture_id"=>"3", "city"=>"横浜市緑区", "house_number"=>"567-3", "commit"=>"依頼する", "controller"=>"items", "action"=>"create"} permitted: false>

と表示され、パラメーターは正常に送れていることが分かった。



###2 privateメソッドでrequireを使う必要はないのでは?と思ったので、requireを消去した。
```private

  def item_params
     params.permit(:name, :number, :store, :month_id, :day_id, :hour_id, :minute_id, :prefecture_id, :city, :house_number)
  end

すると,param is missing or the value is empty のエラーは解決することができました。
原因は、おそらく、このフォームが複数テーブルへのデータの保存をするフォームだったので、requireでモデルを指定すると、指定されたモデルは一つだけになってしまい、permitの引数のキーはそのモデルには存在しなかったと考えられます。

以上になります。
*(注) 僕のエラー解決法は、一例にすぎません。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?