select_tag сортирует (странно) [Rails] - PullRequest
2 голосов
/ 09 февраля 2009

У меня есть поле выбора, которое выглядит следующим образом (внутри формы)

  <%=f.select(:whatever_id, {"blah"=>0, "blah2"=>1, "blah3"=>2, "blah4"=>3}, {:include_blank => true}) %>

и вывод хороший, но странный ... вот так:

<select id="personal_information_whatever_id" name="personal_information[whatever_id]"><option value=""></option>
<option value="1">blah2</option>

<option value="2">blah3</option>
<option value="0">blah</option>
<option value="3">blah4</option></select>

Но я хочу, чтобы все было в порядке ... что происходит и как я могу это исправить?

Редактировать: Я чувствую, что ответ связан с этим

Вы никогда не можете быть гарантированы порядок с хешами. Вы могли бы попробовать .sort () для сортировки значений в в алфавитном порядке.

Есть ли что-нибудь, что я могу использовать помимо хеша?

Ответы [ 3 ]

9 голосов
/ 09 февраля 2009

Да, вы должны использовать массив массивов. Самый простой способ на вашем примере будет выглядеть примерно так:

<%=f.select(:whatever_id, [["blah", 0], ["blah2", 1], ["blah3", 2], ["blah4", 3]], {:include_blank => true}) %>

Этого должно быть достаточно. Взгляните на документы на api.rubyonrails.com тоже.

2 голосов
/ 17 декабря 2010

В вашей модели определите свой хэш (в вашем случае ваша модель «что угодно», а ваш хэш «бла»):

BLAHS = { "blah"=>0, "blah2"=>1, "blah3"=>2 }

В теге select, куда вы помещаете свой хеш, введите

Whatever::BLAHS.sort {|a,b| a[1] <=> b[1]}

Это создает массив, как описано в других ответах, упорядоченный вторым элементом (идентификатор / номера).

После сохранения, когда вы извлекаете из базы все, что хотите, и хотите показать поле, бла, сделайте это

Whatever::BLAHS.index whatever.blah

Массив массивов, упомянутых другими, работает, но когда вы хотите показать что угодно, как вы показываете ценность бла хорошим способом? Я рекомендую придерживаться хеша, поскольку это решает эту проблему.

0 голосов
/ 09 февраля 2009

Проблема в том, что параметр options является хешем, а хеши не имеют гарантированного порядка.

Это должно сработать для вас

  <%= f.select(:whatever_id, ([["blah",0],["blah2",1],["blah3",2]]), {:include_blank => true}) %>

Редактировать в ответ на ваш комментарий: Коллекции см. collection_select

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...