我对strong_parameters有点不满。
我发布了一大堆JSON来处理并作为关系模型添加到中央模型。它看起来像这样:
{
"buncha_data": {
"foo_data" [
{ "bar": 1, "baz": 3 },
...
]
},
...
}
我有一个看起来应该有效的需求/许可流程:
class TheController < ApplicationController
def create
mymodel = MyModel.create import_params
end
def import_params
params.require(:different_property)
params.require(:buncha_data).permit(foo_data: [:bar, :baz])
params
end
end
然而,在迭代这些数据以创建相关模型的create方法中:
self.relatables = posted_data['buncha_data']['foo_data'].map do |raw|
RelatedModel.new raw
end
我得到ActiveModel::ForbiddenAttributesError
。我最终要做的就是自己遍历数组并在数组中的每个哈希上调用permit
,如下所示:
params.required(:buncha_data).each do |_, list|
list.each{ |row| row.permit [:bar, :baz] }
end
是什么给出了?
答案 0 :(得分:1)
正如MikeJ所指出的那样 - require
和permit
不会更新对象。
我重写了我的控制器:
def import_params
params[:different_property] = params.require(:different_property)
params[:buncha_data] = params.require(:buncha_data).permit(foo_data: [:bar, :baz])
params
end
一切都很好。如果你阅读source code,这有点明显。