我使用以下内容允许我的用户在他们的个人资料中选择他们的性别。
<%= f.select (:sex, %w{ Male Female }) %>
如果没有将任何内容传递给user.sex列,我将如何创建列表默认的空白值?我只是将男性或女性作为一个字符串传递。
目的是我想要一个空白值,所以验证可以确保他们知道他们必须选择它。
答案 0 :(得分:119)
根据您的目标,有两种可能性:
include_blank
<%= f.select (:sex, %w{ Male Female }, :include_blank => true) %>
这将始终在选择中包含一个空白选项,如果他们在编辑表单上看到这一点,则允许人们将值设置回空白值。
prompt
<%= f.select (:sex, %w{ Male Female }, :prompt => "Gender...") %>
这将包括指定的提示值,只要该字段尚未设置即可。如果它(例如在编辑表单上),则无需提醒用户他们需要选择一个值,因此提示不会出现
答案 1 :(得分:32)
我认为你可以这样做:
<%= f.select (:sex, %w{ Male Female }, {:include_blank => 'None Specified'} ) %>
答案 2 :(得分:3)
在Rails 4中你可以实现这样的提示:
<%= f.select :gender, %w{ Male Female }, {:prompt => "Gender..."} %>
它以简单的形式为我工作。
答案 3 :(得分:0)
你选择
<%= f.select :gender, %w{ Male Female }, :include_blank => true %>
答案 4 :(得分:0)
我试图使用'prompt'作为字符串。但是在渲染的输出中,没有出现新的选项提示。 select_tag方法仅搜索符号。 :include_blank也是如此。查看选项。删除:
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。