【发布时间】:2011-05-25 13:51:15
【问题描述】:
我正在使用以下内容来允许我的用户在他们的个人资料中选择他们的性别。
<%= f.select (:sex, %w{ Male Female }) %>
如果没有将任何内容传递给 user.sex 列,我将如何创建列表默认的空白值?我只是将男性或女性作为字符串传递。
目的是我想要一个空白值,以便验证可以确保他们知道他们必须选择它。
【问题讨论】:
标签: ruby-on-rails ruby select
我正在使用以下内容来允许我的用户在他们的个人资料中选择他们的性别。
<%= f.select (:sex, %w{ Male Female }) %>
如果没有将任何内容传递给 user.sex 列,我将如何创建列表默认的空白值?我只是将男性或女性作为字符串传递。
目的是我想要一个空白值,以便验证可以确保他们知道他们必须选择它。
【问题讨论】:
标签: ruby-on-rails ruby select
我尝试使用“提示”作为字符串。但是在渲染的输出中,没有出现新的选项提示。 select_tag 方法仅搜索符号。 :include_blank 似乎也是如此。查看 options.delete:
def select_tag(name, option_tags = nil, options = {})
option_tags ||= ""
html_name = (options[:multiple] == true && !name.to_s.ends_with?("[]")) ? "#{name}[]" : name
if options.include?(:include_blank)
include_blank = options.delete(:include_blank)
if include_blank == true
include_blank = ''
end
if include_blank
option_tags = content_tag(:option, include_blank, value: '').safe_concat(option_tags)
end
end
if prompt = options.delete(:prompt)
option_tags = content_tag(:option, prompt, value: '').safe_concat(option_tags)
end
content_tag :select, option_tags, { "name" => html_name, "id" => sanitize_to_id(name) }.update(options.stringify_keys)
end
还要注意 :include_blank 和 :prompt 将是 select 或 select_tag 的选项,而不是 options_for_select。
【讨论】:
有两种可能性,具体取决于您的追求:
include_blank<%= f.select (:sex, %w{ Male Female }, :include_blank => true) %>
这将始终在选择中包含一个空白选项,这将允许人们在编辑表单上看到此值时将值设置回空白值。
prompt<%= f.select (:sex, %w{ Male Female }, :prompt => "Gender...") %>
这将包括指定的提示值,只要该字段尚未设置。如果有(例如在编辑表单上),则无需提醒用户他们需要选择一个值,因此提示不会出现
【讨论】:
随你去
<%= f.select :gender, %w{ Male Female }, :include_blank => true %>
【讨论】:
在 Rails 4 中,您可以实现如下提示:
<%= f.select :gender, %w{ Male Female }, {:prompt => "Gender..."} %>
它以简单的形式为我工作。
【讨论】:
我认为你可以这样做:
<%= f.select (:sex, %w{ Male Female }, {:include_blank => 'None Specified'} ) %>
【讨论】:
new 表单中使用了“提示:‘none’”,但在 edit 表单中没有显示。这可确保 none 始终作为选项包含在内。