属性应该是一个数组,但是一个ActionController :: Parameters

时间:2015-02-13 00:56:27

标签: ruby-on-rails

我收到以下错误:

ActiveRecord::SerializationTypeMismatch at /classifications
Attribute was supposed to be a Array, but was a ActionController::Parameters. -- {"1"=>"pumpkin text"} 

在我的分类模型中,我有以下序列化,它对应一个名为default_fields的文本类型的mysql列:

serialize :default_fields, Array

在我看来,name属性如下:

<input id="classification_default_fields_n" name="classification[default_fields][1]" type="checkbox" value="pumpkin text">

我可以有多个这样的字段:

<input id="classification_default_fields_n" name="classification[default_fields][2]" type="checkbox" value="cucumber text">
<input id="classification_default_fields_n" name="classification[default_fields][3]" type="checkbox" value="orange text">

如您所见,我期待变量default_fields中的字符串数组。但是,它不会将这些字段作为数组进行尝试。它将它们视为键/值对的散列。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

好的,我现在明白了。如果要发送数组,则括号必须为空,如下所示:

classification[default_fields][]"

如果要发送散列,则方括号必须包含表示键的值,并且值由输入数据表示:

classification[default_fields][1]

现在,如果要发送哈希的集合(哈希),则括号中的值表示其中一个哈希元素的键:

classification[default_fields[1][key1]]
classification[default_fields[2][key2]]

还要为您想要的内容添加正确的序列化:

  serialize :default_fields, Hash
  # or
  serialize :default_fields, Array