##解決したいこと
フォームの入力欄を入力後、送信ボタンを押すと、
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の引数のキーはそのモデルには存在しなかったと考えられます。
以上になります。
*(注) 僕のエラー解決法は、一例にすぎません。