製品インデックス ページに次の項目があります。
<%= button_to "Add", user_order_orderitems_path(user_id: current_user.id, item_id: x.id, order_id: current_user.group.current_order.id), class: "btn btn-mini" %>
ログからわかるのは、コントローラーの Orderitems#create アクションによって取得されていることです。これは次のようになります。
def create
@orderitem = Orderitem.new(orderitem_params)
if @orderitem.save
redirect_to items_path
else
redirect_to items_path
end
end
private
def orderitem_params
params.require(:orderitem).permit(:user_id, :order_id, :item_id)
end
end
button_to 呼び出しで指定されたパラメーターが作成され、ログに次のように表示されます。
Started POST "/users/1/orders/1/orderitems?item_id=2264" for 127.0.0.1 at 2013-07-03 22:45:24 +0100
Processing by OrderitemsController#create as HTML
Parameters: {"authenticity_token"=>"blah=", "item_id"=>"2264", "user_id"=>"1", "order_id"=>"1"}
最後に-問題-私のstrong_paramsメソッドは、私が気にかけている3つのパラメーターが「Orderitem」をキーとしてハッシュにネストされていないため、これらのパラメーターを処理できません。私の作成アクションが機能するためには、次のようなものが必要だと思います。
Parameters: {"authenticity_token"=>"blah=", "orderitems"=>{"item_id"=>"2264", "user_id"=>"1", "order_id"=>"1"}}
しかし、私の人生では、button_toでこれを行うことができます-form_forを試しましたが、これもうまくいきませんでした。これで数日間、レンガの壁に頭をぶつけます...では、3つのIDをOrderItemsControllerの作成アクションに投稿して、製品のインデックスビューからフォームフォーまたは新しいアクションをバイパスするにはどうすればよいですか? 出来ますか?
このシナリオ (商品をバスケットに追加する) に完全に間違った方法でアプローチしている場合はお知らせください。