Как установить пустое значение для поля формы f.select
Я использую следующее, чтобы мои пользователи могли выбирать свой пол в своем профиле.
<%= f.select (:sex, %w{ Male Female }) %>
Как мне создать пустое значение, которое по умолчанию будет иметь список, если ничего не было передано в столбец user.sex? Я просто прохожу мимо мужчины или женского пола.
Цель: я хочу пустое значение, поэтому проверка может убедиться, что они знают, что им нужно выбрать его.
Ответы
Ответ 1
В зависимости от того, что вы после: есть две возможности:
include_blank
<%= f.select (:sex, %w{ Male Female }, :include_blank => true) %>
Это всегда будет включать пустой параметр в select, который позволит людям вернуть значение в пустое значение, если они видят это в форме редактирования.
prompt
<%= f.select (:sex, %w{ Male Female }, :prompt => "Gender...") %>
Это будет включать указанное значение приглашения, если поле еще не установлено. Если у него есть (например, в форме редактирования), нет необходимости напоминать пользователю, что им нужно выбрать значение, чтобы приглашение не отображалось
Ответ 2
Я думаю, вы можете сделать что-то вроде этого:
<%= f.select (:sex, %w{ Male Female }, {:include_blank => 'None Specified'} ) %>
Ответ 3
в Rails 4 вы можете сделать так:
<%= f.select :gender, %w{ Male Female }, {:prompt => "Gender..."} %>
он работает для меня с простой формой.
Ответ 4
Вы идете с
<%= f.select :gender, %w{ Male Female }, :include_blank => true %>
Ответ 5
Я пытался использовать "приглашение" в качестве строки. Но в отображаемом выводе приглашение новой опции не появлялось. Метод 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.