说我正在查询水果清单,然后将水果的ID和名称收集到@fruit中。
[32, "apple"],
[8, "bannana"],
[10, "cantelope"],
[11, "grape"],
[15, "orange"],
[41, "peach"],
[22, "watermelon"]
@fruit正在Select帮助器中使用。位于@fruit的索引0处的“apple”将是select的选定值(第一选项)。这是一个组成的示例,但默认情况下,我总是知道“橙色”是什么名称(而不是id)。我需要“orange”作为select标签的选定值(第一个选项)。
“:prompt =>'orange'”只是在select中添加了第二个“orange”实例。到目前为止,我在Google上找到的所有内容似乎都是为了在列表中添加额外的值或空白。
由于数组的索引0总是成为选定的值(如果在select帮助器中没有使用提示符或空白),有没有办法可以找到包含名称“orange”的索引(@fruit [x]。 name =='orange'),并将其移至索引0,同时保留列表其余部分中的现有alpha排序?所以,@ fruit数组看起来像:
@fruit[0] [15, "orange"],
@fruit[1] [32, "apple"],
@fruit[2] [8, "bannana"],
@fruit[3] [10, "cantelope"],
@fruit[4] [11, "grape"],
@fruit[5] [41, "peach"],
@fruit[6] [22, "watermelon"]
我现在唯一能想到的就是遍历@fruit,如果发现“orange”,则将其添加到新数组中。然后再次遍历@fruit数组并添加任何没有“orange”名称的内容。我不知道如何写出来,但似乎它会做我正在寻找的东西。也许有一些简单的方法可以做到这一点我缺少(指定数组中的哪个索引是第一个写的选项)?
谢谢!
答案 0 :(得分:18)
见这里:http://guides.rubyonrails.org/form_helpers.html#making-select-boxes-with-ease
如果使用现有帮助程序,则可以通过id指定要选择的选项。特别是这个例子:
<%= options_for_select([['Lisbon', 1], ['Madrid', 2]], 2) %>
output:
<option value="1">Lisbon</option>
<option value="2" selected="selected">Madrid</option>
你说你不知道ID是哪个选项是“橙色”。如果你想在水果数组中找到“orange”的ID,那么你可以使用帮助器:
(@fruit.detect { |i| i[1] == 'orange' } || []).first
答案 1 :(得分:11)
您可以在select标记中使用options_from_collection_for_select
来选择默认选项。例如:
<%= select_tag 'state',
options_from_collection_for_select(@fruits, 'id', 'name', 15),
:include_blank => true %>
默认选择“橙色”。 API Docs