How do I set a blank value for an f.select form field

前端 未结 5 1728
花落未央
花落未央 2021-02-01 12:24

I am using the following to allow my users to select their sex in their profile.

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

How would I c

相关标签:
5条回答
  • 2021-02-01 12:48

    There are two possibilities, depending on what you're after:

    include_blank

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

    This will always include a blank option in the select, which will allow people to set the value back to the blank value if they're seeing this on an edit form.

    prompt

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

    This will include the specified prompt value, so long as the field hasn't already been set. If it has (on an edit form for example), there's no need to remind the user that they need to select a value so the prompt doesn't appear

    0 讨论(0)
  • 2021-02-01 12:51

    You go with

    <%= f.select :gender, %w{ Male Female }, :include_blank => true %>
    
    0 讨论(0)
  • 2021-02-01 12:52

    I tried to use 'prompt' as a string. But in the rendered output, the new option prompt was not appearing. The select_tag method searches only for a symbol. It appears to be the case for :include_blank as well. Check out the 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
    

    Also note that :include_blank and :prompt will be options of the select or select_tag, not the options_for_select.

    0 讨论(0)
  • 2021-02-01 12:54

    I think you can do something like this:

    <%= f.select (:sex, %w{ Male Female }, {:include_blank => 'None Specified'} ) %>
    
    0 讨论(0)
  • 2021-02-01 13:00

    in Rails 4 you can achieve prompt like this:

    <%= f.select :gender, %w{ Male Female }, {:prompt => "Gender..."} %>
    

    its working for me with simple form.

    0 讨论(0)
提交回复
热议问题