Ruby 每个循环基于数组
Ruby each loop based on array
我有一个这样的数组:
@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>
结果如下:
如何为每个国家分组?我的意思是这样的:
马来西亚
亚罗士打
民都鲁
怡保
柔佛
印度尼西亚
古晋
纳闽
兰卡威
槟城
美里
在您看来,您可以这样做:
<% 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>
的逻辑。希望你能相应地修复它。
我有一个这样的数组:
@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>
结果如下:
如何为每个国家分组?我的意思是这样的:
马来西亚
亚罗士打
民都鲁
怡保
柔佛
印度尼西亚
古晋
纳闽
兰卡威
槟城
美里
在您看来,您可以这样做:
<% 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>
的逻辑。希望你能相应地修复它。