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 方法无法处理这些参数,因为我关心的三个参数没有嵌套在以“Orderitem”为键的哈希中。我希望,为了使我的创建操作起作用,我需要类似的东西:

      Parameters: {"authenticity_token"=>"blah=", "orderitems"=>{"item_id"=>"2264", "user_id"=>"1", "order_id"=>"1"}}

但是我一生都无法弄清楚如何使用 button_to 来做到这一点 - 我尝试了 form_for,但这也没有奏效。在这个砖墙上敲了几天的头......那么,如何将我的三个 id 发布到我的 OrderItemsController 从 Products 的索引视图创建操作但绕过任何 form_for 或新操作?可能吗?

如果我以完全错误的方式处理这种情况(将物品添加到购物篮),请告诉我。

4

1 回答 1

1

这样,您可以将标准哈希视为强参数支持的哈希

raw_parameters = {"authenticity_token"=>"blah=",  "item_id"=>"2264", "user_id"=>"1", "order_id"=>"1"}

parameters = ActionController::Parameters.new(raw_parameters)
parameters.permit(:user_id, :order_id, :item_id)
于 2013-07-03T22:15:45.050 回答