Ruby on Rails: как использовать заполнитель по умолчанию в select_tag? - PullRequest
38 голосов
/ 29 декабря 2010
 <%= select_tag(:services, 
                       options_from_collection_for_select(Service.all, :id, :name))%>

И он отображает все услуги ...

Но я хочу, чтобы это было что-то вроде:

Select a service
Service1
Service2
Service3
Service4

Ответы [ 3 ]

152 голосов
/ 14 марта 2012

В большинстве случаев вы не хотите добавлять что-либо непосредственно в массив; любое из них является более чистым решением:

  • Используйте :prompt => "Placeholder", если вы хотите, чтобы местозаполнитель отображался только тогда, когда атрибут равен нулю во время отображения формы. Он будет выбран по умолчанию, но ничего не будет сохранено, если пользователь отправит. Если атрибут уже заполнен (возможно, из-за того, что а) существует значение по умолчанию или б) это форма редактирования), элемент-заполнитель будет полностью исключен из списка.
  • Используйте :include_blank => "Placeholder", если вы хотите всегда включать местозаполнитель в отображаемый список.
14 голосов
/ 29 декабря 2010
<%= select_tag(:services, 
               Service.all.collect { |c| [c.id, c.name] }.
               insert(0, "Select a Service"))%>

Как ответили на вопрос, это для Rails 2.3. Для Rails 3 см. Ответ Пратана Тананарта.

13 голосов
/ 14 февраля 2012

Лучший способ сделать это - использовать параметр: prompt.Что-то вроде:

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, {:prompt => 'Select Person'})

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html

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