【问题标题】:How do I set a blank value for an f.select form field如何为 f.select 表单字段设置空白值
【发布时间】:2011-05-25 13:51:15
【问题描述】:

我正在使用以下内容来允许我的用户在他们的个人资料中选择他们的性别。

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

如果没有将任何内容传递给 user.sex 列,我将如何创建列表默认的空白值?我只是将男性或女性作为字符串传递。

目的是我想要一个空白值,以便验证可以确保他们知道他们必须选择它。

【问题讨论】:

    标签: ruby-on-rails ruby select


    【解决方案1】:

    我尝试使用“提示”作为字符串。但是在渲染的输出中,没有出现新的选项提示。 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。

    【讨论】:

      【解决方案2】:

      有两种可能性,具体取决于您的追求:

      include_blank

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

      这将始终在选择中包含一个空白选项,这将允许人们在编辑表单上看到此值时将值设置回空白值。

      prompt

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

      这将包括指定的提示值,只要该字段尚未设置。如果有(例如在编辑表单上),则无需提醒用户他们需要选择一个值,因此提示不会出现

      【讨论】:

      • 第一个选项将发送一个带参数的空字符串。任何想法如何绕过这个?
      • @m_w_k:你想要什么?这个问题的重点是空白值:“目的是我想要一个空白值,以便验证可以确保他们知道他们必须选择它”
      • @Gareth 是的,对不起。我被抓到在思考自己的问题,那就是摆脱空白提交(即取消它们)。我现在正在对模型中的所有内容进行规范化。
      • 提示不按所述工作。即使选择了另一个值,提示值仍然是一个可选选项。
      • @EricChen 这很奇怪 - 正如我所解释的那样,is documented 的行为,在 ActionView 中有 a test that checks this。您确定您的代码没有其他问题吗?
      【解决方案3】:

      随你去

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

      【讨论】:

        【解决方案4】:

        在 Rails 4 中,您可以实现如下提示:

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

        它以简单的形式为我工作。

        【讨论】:

        • 这行得通,上面的旧答案似乎已经过时,由于 Rails 4.2.5 中的括号放置而引发错误。
        【解决方案5】:

        我认为你可以这样做:

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

        【讨论】:

        • 这在 Rails 4 中有效。Gareth 的回答不适用于提示。
        • 谢谢,我很难使用简单的表格来实现这一点。我在 new 表单中使用了“提示:‘none’”,但在 edit 表单中没有显示。这可确保 none 始终作为选项包含在内。
        猜你喜欢
        • 1970-01-01
        • 2016-03-15
        • 1970-01-01
        • 2020-07-29
        • 1970-01-01
        • 2013-10-29
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        相关资源
        最近更新 更多