在散列中包含 key/value 对和单个值

Include key/value pairs and single values in a hash

我有一个包含以下字段的嵌套属性表单:

(注意第三个属性不是数组)

在我的控制器中,强参数是这样写的:

params.require(:campaign).permit(
  :somevalue,
  nests_attributes: {
    attr1: [],
    attr2: [],
    :attr3
  }
)

当然,这不起作用,因为 attr1attr2 使用 key/value 对来建立数组,而 attr3 是允许的单个值。

如何同时使用两者?

鉴于此参数:

{"campaign"=>{"somevalue"=>1, "nest"=>{"attr1"=>[1, 2, 3], "attr2"=>[1, 3, 4], "attr3"=>3}}}

你可以这样做:

params.require(:campaign).permit(
  :somevalue,
  nest: [:attr3, attr1: [], attr2: []]
)

你可能会觉得看到 [] 里面有 attr1: [] 很奇怪,但它在 Ruby 中是完全有效的语法。它将被解释为:

[:attr3, {:attr1=>[], :attr2=>[]}]