Подтвердить что ты не робот

Как установить пустое значение для поля формы f.select

Я использую следующее, чтобы мои пользователи могли выбирать свой пол в своем профиле.

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

Как мне создать пустое значение, которое по умолчанию будет иметь список, если ничего не было передано в столбец user.sex? Я просто прохожу мимо мужчины или женского пола.

Цель: я хочу пустое значение, поэтому проверка может убедиться, что они знают, что им нужно выбрать его.

4b9b3361

Ответ 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.