Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Админка на Ruby on Rails

Структура данных для grouped_options_for_select Ruby on Rails

Структура данных для использования в grouped_options_for_select Ruby on Rails.

В официальной документации Ruby on Rails приведены буквально следующие примеры:

Sample usage (Array):

grouped_options = [
 ['North America',
   [['United States','US'],'Canada']],
 ['Europe',
   ['Denmark','Germany','France']]
]
grouped_options_for_select(grouped_options)

Sample usage (Hash):

grouped_options = {
 'North America' => [['United States','US'], 'Canada'],
 'Europe' => ['Denmark','Germany','France']
}
grouped_options_for_select(grouped_options)

Possible output:

<optgroup label="Europe">
  <option value="Denmark">Denmark</option>
  <option value="Germany">Germany</option>
  <option value="France">France</option>
</optgroup>
<optgroup label="North America">
  <option value="US">United States</option>
  <option value="Canada">Canada</option>
</optgroup>

 

Все логично, все вроде бы правильно. Но иногда создается впечатление, что как-будто сами создатели Ruby on Rails либо намеренно, либо по забывчивости недоговаривают или дают не вполне корректные или не полные рекомендации.

В примере с использованием Hash была бы более логична для полного примера следующая структура, которая, кстати, прекрасно работает на самом деле:

grouped_options = {
  'North America' => {
    'United States' => 'US',
    'Canada' => 'Canada'
  },
  'Europe' => ['Denmark', 'Germany', 'France']
}
grouped_options_for_select(grouped_options)

 

Я лишь хочу показать, что возможно использование Hash, а не только Array. Единственная проблема, которая возникает при использовании хэша - происходит сортировка элементов optgroup.