0

製品インデックス ページに次の項目があります。

<%= 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の作成アクションに投稿して、製品のインデックスビューからフォームフォーまたは新しいアクションをバイパスするにはどうすればよいですか? 出来ますか?

このシナリオ (商品をバスケットに追加する) に完全に間違った方法でアプローチしている場合はお知らせください。

4

1 に答える 1