具有has_many嵌套属性的模型的强参数

时间:2014-07-15 12:37:41

标签: ruby-on-rails-4 nested-attributes has-many strong-parameters

如何为这样的参数使用强参数:

{ 
  ... attributes of a model,
  related_model_attributes => [ 
       RANDOM_HASH_KEY => { attr_1 => value_1, ... other attributes },
       ANOTHER_RANDOM_KEY => { attr_1 => value_1, ... other attributes}
       ...
  ]
}

如果我使用正常的许可证样式,例如ff片段:

permit!(... model attributes, related_model_attributes: [{:attr_1, ..other attributes]])

它会在随机哈希键上抛出和非允许的错误。

如何将强参数与has_many一起使用?

1 个答案:

答案 0 :(得分:1)

除了显而易见的丑陋之外,没有官方认可的方法可以做到这一点。

给出这样的哈希:

{ thing: {
    thangs_attributes: {
       'some_synethic_index' => { 
           attribute: value
        },
        'some_other_index'   => {
           attribute: value
        }
     }
 }

这个想法基本上是允许thang_attributes散列中的键基于它们的外观。

像这样。

def thing_params
   thangs_attributes = params[:thing][:thangs_attributes].keys.each_with_object([]) do |k, memo|
      memo << { k => [:id, '_destroy', :attribute] }
   end

   params.require(:thing).permit(thangs_attributes: thangs_attributes)
end

应该为thangs_attributes中的每个随机索引键设置嵌套哈希值。或者,不安全地,您可以调用params.require(:thing).permit!,这将允许任何和所有参数。