Ruby每个循环都基于数组

时间:2015-06-16 17:40:23

标签: ruby sinatra

我有一个这样的数组:

@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>

给出如下结果:

Result

如何为每个国家/地区分组?我的意思是这样的:

马来西亚
亚罗士打 民都鲁
怡保

印度尼西亚
古晋
纳闽
兰卡威
槟城
米里

1 个答案:

答案 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>的逻辑。希望你能相应地解决它。