Rail的strong_parameters没有将Array的哈希标记为允许

时间:2015-04-15 21:18:00

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

我对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

是什么给出了?

1 个答案:

答案 0 :(得分:1)

正如MikeJ所指出的那样 - requirepermit不会更新对象。

我重写了我的控制器:

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,这有点明显。