我正在使用Rails 3.2.0.rc2。我有一个Model
,其中有一个静态变量Array
,该静态变量通过一种形式提供,以便用户可以选择的子集Array
并将其选择保存到数据库中,存储在中的单个列中Model
。我已经在存储的数据库列上使用了序列化,Array
并且Rails正确地将用户的选择转换为Yaml(并在读取该列时返回到数组)。我正在使用多选表单输入进行选择。
我的问题是,按照我目前的方式,一切都会按我预期的那样工作,只是用户的子集数组在发送到服务器时始终具有空白的第一个元素。
这没什么大不了的,我可以写出代码以消除这种情况,但是我觉得我只是在犯某种语法错误,因为在我看来,默认的Rails行为不是故意的无需任何理由即可添加此空白元素。我一定错过了某件事,或者忘记了禁用某种设置。请帮助我了解我所缺少的内容(或为我提供一些好的文档,这些文档比在管间上可以找到的更深入地描述了此内容)。
MySQL数据库表“模型”:
- 包含一个名为
subset_array
TEXT字段的列
类模型包括以下设置:
serialize :subset_array
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
用于编辑模型的表单包括以下输入选项:
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
从客户端PUT到服务器看起来像这样:
- 假设仅选择了value1和value3
"model" => { "subset_array" => ["", value1, value3] }
数据库更新如下所示:
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
如您所见,正在发送并在数据库中设置的数组中还有这个多余的空白元素。我该如何摆脱呢?我的f.select
通话中是否缺少参数?
非常感谢:)
编辑:这是从f.select
语句生成的HTML代码。似乎正在生成一个隐藏的输入,这可能是我的问题的原因?为什么在那里?
<input name="model[subset_array][]" type="hidden" value>
<select id="model_subset_array" multiple="multiple" name="model[subset_array][]" selected="selected">
<option value="value1" selected="selected">Value1</option>
<option value="value2">Value2</option>
<option value="value3" selected="selected">Value3</option>
<option...>...</option>
</select>
f.select
正在生成的HTML代码段吗?此外,即使在创建时也会发生此行为,还是仅在更新时发生?