【问题标题】:Rails 4 strong params confusionRails 4强参数混淆
【发布时间】:2014-05-06 19:16:51
【问题描述】:

我正在尝试在 Rails 4.1 中使用强大的参数并且失败了。

# Some request params
params = ActionController::Parameters.new({
  order: {
    shipping_method: '03',
    line_items_attributes: [{
      sale_id: "12847",
      qty: "12"
    }]
  }
})

# try to permit them all
params.permit(:order).permit(
  :shipping_method,
  {
    line_item_attributes: [
      :sale_id,
      :qty,
    ]
  }
)

# Unpermitted parameters: order
# => {}

我希望能够允许所有这些参数。

为什么我会收到该警告,为什么我会收到一个空哈希作为返回值?


似乎require 更有帮助,但我仍然无法获得嵌套的哈希数组

params.require(:order).permit(
  :shipping_method,
  {
    line_item_attributes: [
      :sale_id,
      :qty,
    ]
  }
)

# Unpermitted parameters: line_items_attributes
# => {"shipping_method"=>"03"}

【问题讨论】:

  • 我认为应该是params.require(:order).permit(...)。注意 require 而不是 permit。

标签: ruby-on-rails ruby ruby-on-rails-4 strong-parameters


【解决方案1】:

应该是params.require(:order) 而不是params.permit(:order)

Rails Docs : Action Controller Parameters

中查看此内容

您的代码应如下所示:

params = ActionController::Parameters.new({
  order: {
    shipping_method: '03',
    line_items_attributes: [{
      sale_id: "12847",
      qty: "12"
    }]
  }
})

然后

params.require(:order).permit(
  :shipping_method,
  {
    line_items_attributes: [
      :sale_id,
      :qty,
    ]
  }
)

注意:您需要允许line_items_attributes(注意复数项)而不是line_item_attributes(不是单数项)。 (假设您在OrderLineItem 之间有1-M association

【讨论】:

  • 所以permit 不会钻入哈希,但require 会?在这种情况下,params[:order] 是必需的,所以应该没问题。但它现在咳了Unpermitted parameters: line_items_attributes
  • 天哪。可恶。很好地抓住了错字... (尴尬) 也许是时候休息一下了。谢谢。
【解决方案2】:

您的问题与您在定义接受的参数时两次调用permit 的事实有关。强参数的工作方式是您必须require 对应于您尝试构建的对象的参数(在您的情况下为:order)。然后,您可以通过调用permit 链接此方法,该方法接受与您希望为对象接受的参数相对应的以逗号分隔的参数列表:

params.require(:order).permit(:shipping_method, :line_items_attributes,...)

如果您希望接受嵌套参数,则必须在 permit 方法中将它们指定为数组:

params.require(:order).permit(:shipping_method, 
                              line_items_attributes: [:sale_id, :qty])

查看full documentation 了解更多信息。

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 2013-11-15
    • 2014-06-12
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多