2015-06-16 2 views
0

У меня есть массив как это:рубин каждый цикл на основе массива

@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

Как я могу сгруппировать его для каждой страны? Я имею в виду, как это:

Малайзия
Алор Setar
Бинталу
Ipoh
Джохор

Индонезия
Кучинг
Лабуан
Langkawi
Пенанг
Мири

ответ

2

На ваш взгляд, вы можете сделать что-то вроде:

<% 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> в моем примере. Надеюсь, вы сможете это исправить.

+1

Большое вам спасибо. Этот метод устранил мою проблему. Примите ваш ответ. – AmirolAhmad

Смежные вопросы