Ответ 1
<%= select_tag(:services,
Service.all.collect { |c| [c.id, c.name] }.
insert(0, "Select a Service"))%>
Как ответил на вопрос, это для Rails 2.3. Для Rails 3 см. Ответ Пратан Тананарт.
<%= select_tag(:services,
options_from_collection_for_select(Service.all, :id, :name))%>
И он отображает все службы...
Но я хочу, чтобы это было что-то вроде:
Select a service
Service1
Service2
Service3
Service4
<%= select_tag(:services,
Service.all.collect { |c| [c.id, c.name] }.
insert(0, "Select a Service"))%>
Как ответил на вопрос, это для Rails 2.3. Для Rails 3 см. Ответ Пратан Тананарт.
В большинстве случаев вы не хотите ничего добавлять к массиву напрямую; любой из них является более чистым решением:
:prompt => "Placeholder"
, если вы хотите, чтобы заполнитель отображался только тогда, когда атрибут равен нулю при отображении формы. Он будет выбран по умолчанию, но ничего не будет сохранено, если пользователь отправит. Если атрибут уже заполнен [возможно, потому что a) существует значение по умолчанию или b) это форма редактирования], элемент-заполнитель будет полностью исключен из списка.:include_blank => "Placeholder"
, если вы хотите включить заполнитель в отображаемый список в любое время.Лучший способ сделать это - использовать параметр: 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