2011-09-07 81 views
2

我正在学习rails,并且一直在为此奋斗了一天以上,无法弄清楚如何使这个工作。我想在我的表单中可以选择多个元素的选择框。我有这样的与此代码的工作:形式多选

<div class="field"> 
<%= f.label :products %><br /> 
<%= f.select :products, {"A"=>1, "B"=>2, "C"=>3, "D"=>4},{},:size=>5,:multiple=>true %> 
</div> 

这工作得很好,并产生这个HTML:

<div class="field"> 
<label for="script_products">Products</label><br /> 
<select id="script_products" multiple="multiple" name="script[products][]" size="5">   
<option value="1">A</option> 
<option value="2">B</option> 
<option value="3">C</option> 
<option value="4">D</option></select> 
</div> 

我可以找出是查询结果如何发送/存储。在我的“秀”的行动来看,如果我只是打印出来:产品我得到这个:

产品:--- - “1” - “2” - “3”

如果我打印出来:products.inspect我得到这个:

产品 “--- \正 '1' \正 '2' \正 '3' \ n” 个

和类是一个字符串。我会认为它将作为一个数组存储,但我无法让它工作。我不知道破折号或换行符来自哪里。

+0

您正在打印'params [:script] [:products]'的结果吗? – nathanvda

+0

我这样做:<%= @ script.products%> –

+0

这是脚手架生成的代码。最初在新视图中,它是一个文本字段,我将其更改为多个选择框。所以,我想我需要改变我的模型,以反映我想存储数组?但不完全确定。 –

回答

0

我会考虑在模型上添加选项作为一个多关系。因此,您可以遍历它们,附加它们并以更好的方式将它们包含在多选(IMO)中。

我会在我的模型做这样的事情:

has_many :special_options 

笔者认为:

f.select :special_options, :multiple => true 

这将避免序列化和存储他们之前反序列化对象的问题。