我正在学习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>
我能弄清楚结果是如何发送/存储的。在我对“show”动作的看法中,如果我只是打印出来:产品我得到了这个:
产品:--- - '1' - '2' - '3'
如果我打印出来:products.inspect我得到了这个:
产品:“--- \ n-'1'\ n-'2'\ n-'3'\ n”
并且该类是一个字符串。我认为它将存储为一个数组,但我不能让它工作。我不知道破折号或换行符的来源。
答案 0 :(得分:0)
我会考虑将选项添加为模型上的has-many关系。因此,您可以迭代它们,附加它们并以(IMO)更好的方式将它们包含在多个选择中。
我会在我的模型中做一些事情:
has_many :special_options
在我看来:
f.select :special_options, :multiple => true
这样可以避免在存储对象之前必须序列化和反序列化的问题。