【问题标题】:Rails Button_to not passing model paramRails Button_to 不传递模型参数
【发布时间】:2013-07-03 22:10:15
【问题描述】:

我的产品索引页面中有以下内容:

<%= 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 或新操作?有可能吗?

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

【问题讨论】:

    标签: ruby-on-rails ruby parameters


    【解决方案1】:

    这样您可以将标准哈希视为strong parameters支持的哈希

    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)
    

    【讨论】:

    • 太棒了 - 谢谢 - 就 Rails 的“最佳实践”而言,这被认为是好的实践吗?表明我在这方面缺乏知识......
    • 好吧,我不这么认为,这些是来自外部的参数..这里也提供了解决方案github.com/rails/strong_parameters
    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多