Ruby on Rails:如何在select_tag中使用默认的占位符?

Nul*_*uli 38 ruby-on-rails

 <%= select_tag(:services, 
                       options_from_collection_for_select(Service.all, :id, :name))%>
Run Code Online (Sandbox Code Playgroud)

它显示所有服务......

但我希望它是这样的:

Select a service
Service1
Service2
Service3
Service4
Run Code Online (Sandbox Code Playgroud)

Pra*_*art 152

大多数情况下,您不希望直接向数组添加任何内容; 这些都是一个更清洁的解决方案:

  • 使用:prompt => "Placeholder",如果你想占位符展现出来,只有当属性是零的形式呈现的时间.它将默认选中,但如果用户提交,则不会保存任何内容.如果属性已经填充[可能因为a)有一个默认值或b)它是一个编辑表单],占位符项将完全从列表中省略.
  • 使用:include_blank => "Placeholder",如果你想在任何时候呈现的列表中的占位符.


Zab*_*bba 14

<%= select_tag(:services, 
               Service.all.collect { |c| [c.id, c.name] }.
               insert(0, "Select a Service"))%>
Run Code Online (Sandbox Code Playgroud)

正如对这个问题的回答,这是针对Rails 2.3的.对于Rails 3,请参阅Prathan Thananart的回答.


Wil*_*ill 13

更好的方法是使用:prompt参数.就像是:

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

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