在f.select中使用include_blank但不起作用

时间:2016-04-01 04:06:09

标签: ruby-on-rails

我想使用下拉列表列出我的所有项目,第一个选项是空白的。

但是当我添加:include_blank =>是的,它不起作用。

就像那样:

<%= f.select(:project_id, :include_blank => true) do %>
  <% @projects.each do |p| %>
    <%= content_tag(:option, p.name, value: p.id) %>
  <% end -%>
<% end -%>

但如果我使用

<%= f.select(:title, %w{ Male Female }, :include_blank => true) %>

完全正常! 我不知道如何修改第一个代码以显示空白。

谢谢!

3 个答案:

答案 0 :(得分:0)

我认为问题是<%= content_tag … %>。试试这个:

<%= f.select(:project_id, :include_blank => true) do
  @projects.each do |p|
    content_tag(:option, p.name, value: p.id)
  end
end %>

(即只有一个ERB输出嵌入标记)

更新:再看看这个,你不是真的自定义选项的生成方式,你真的需要块吗?

<%= f.select(:project_id, @projects.collect { |p| [p.name, p.id] }, :include_blank => true) %>

答案 1 :(得分:0)

像这样使用:

<%= f.select :category_id, nil, :include_blank => true %>

在文档API LINK

select(object, method, choices = nil, options = {}, html_options = {}, &block)

答案 2 :(得分:0)

你可以这样做:

<%= f.select(:project, :id, @projects.collect {|p| [ p.name, p.id ] }, {:include_blank => true}) %>

或者

<%= f.select(:project_id, @projects.collect {|p| [ p.name, p.id ] }, {:include_blank => true}) %>

或者您可以使用提示符:

<%= f.select(:project, :id, @projects.collect {|p| [ p.name, p.id ] }, {:prompt => 'select project'}) %>