我有一个这样的数组:
@airports = [
['Malaysia', 'Alor Setar', 'AOR'],
['Malaysia', 'Bintulu', 'BTU'],
['Malaysia', 'Ipoh', 'IPH'],
['Malaysia', 'Johor Bahru', 'JHB'],
['Indonesia', 'Kuching', 'KCH'],
['Indonesia', 'Labuan', 'LBU'],
['Indonesia', 'Langkawi', 'LGK'],
['Indonesia', 'Miri', 'MYY'],
['Indonesia', 'Penang', 'PEN'],
]
然后在我看来:
<select name="from" class="form-control select2">
<% @airports.each do |airport| %>
<optgroup label="<%= airport[0] %>">
<option value="<%= airport[2] %>" <%= @params[:from] == airport[2] ? "selected" : "" %>>
<%= "#{airport[1]} (#{airport[2]})" %>
</option>
</optgroup>
<% end %>
</select>
给出如下结果:
如何为每个国家/地区分组?我的意思是这样的:
马来西亚
亚罗士打
民都鲁
怡保
柔
印度尼西亚
古晋
纳闽
兰卡威
槟城
米里
答案 0 :(得分:3)
在您看来,您可以执行以下操作:
<% countries = @airports.group_by{|a| a.first} %>
<% countries.each do |country, airport| %>
<optgroup label="<%= country %>">
<% airport.each do |a| %>
<option value="<%= a[1] %>"></option>
<% end %>
</optgroup>
<% end %>
PS:这只是为了给你一个粗略的想法,我错过了你在我的例子中用于<option value>
的逻辑。希望你能相应地解决它。