我正在尝试在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"}
答案 0 :(得分:2)
应该是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
(不是单数项)。 (假设您1-M association
和Order
之间有LineItem
答案 1 :(得分:0)
您的问题与定义接受参数时调用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])
方法中将它们指定为数组:
{{1}}
查看full documentation了解详情。