最佳答案
我用的是 Rails3.2.0. rc2。我有一个 Model
,其中我有一个静态的 Array
,我提供了一个形式,使用户可以选择一个子集的 Array
和保存他们的选择到数据库中,存储在一个单一的列在 Model
。我已经使用序列化的数据库列存储的 Array
和 Rails 是正确的转换用户的选择到 Yaml (并返回到一个数组读取该列)。我使用多选表单输入来进行选择。
我的问题是,按照我目前的方式,除了用户的子集数组在发送到服务器时总是有一个空白的第一个元素之外,所有东西都按照我预期的方式工作。
这没什么大不了的,我可以在事后编写代码来删除它,但我觉得我只是犯了某种语法错误,因为在我看来,默认的 Rails 行为不会无缘无故地故意添加这个空白元素。我一定是遗漏了什么或者忘了关闭某种设置。请帮助我理解我错过了什么(或者给我指出一些好的文档,这些文档比我在互联网上找到的更深入地描述了这一点)。
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
"model" => { "subset_array" => ["", value1, value3] }
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
如您所见,在数据库中发送和设置的数组中有这个额外的空白元素。我怎么才能摆脱它?我的 f.select
调用中是否缺少一个参数?
非常感谢:)
EDIT : 这是从 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>