【问题标题】:Rails: How to disable asterisk on form's required fields?Rails:如何在表单的必填字段上禁用星号?
【发布时间】:2011-10-04 15:56:48
【问题描述】:

当我添加“必需”属性时
对于 html 输入字段,Rails 在标签前添加一个星号 (*)。

有人知道如何预防吗?

出于某种原因,Rails 对此进行了转换:

<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name" %>

进入这个:

<div class="input string required">
    <label for="company_name" class="string required">
    <abbr title="required">*</abbr> company name</label>
    <input type="text" value="" size="50" required="required" name="lead[Company]" id="company_name" class="string required">
</div>

我不喜欢它把所有东西都包装在一个 DIV 中,并在派对中添加一个 ABBR 元素。

我怎样才能防止这种情况发生?

【问题讨论】:

  • 您能否发布您正在谈论的代码?这会有所帮助。
  • @Lester Peabody - 我已经用我的代码示例更新了问题
  • 您是否使用像formtasticsimple_form 这样的宝石?请发布您的Gemfile
  • 如果您使用的是formtastic gem,here is how to remove the asterisks

标签: ruby-on-rails ruby-on-rails-3.1 simple-form


【解决方案1】:

您可以在 simple_form 的语言环境文件中将所需的标记设置为空值:

en:
  simple_form:
    required:
      text: 'required'
      mark: '*'

或者使用 CSS 来隐藏它。

【讨论】:

  • 会创建一个空的 html 元素吗?因为那将是一个非常不受欢迎的结果。
  • 这不再起作用 - 您现在需要取消注释下面的“html”行(或者如果您还没有它,请添加它),然后将其设置为 html: ''
  • 这就是答案!,如果有人想知道,你应该在 config/locales/ 下创建一个文件名 simple_form.en.yml
  • 无需取消注释html,但您必须重新启动服务器。
  • 使用这种方法你最终会得到空白:&lt;abbr&gt;&lt;/abbr&gt; 标记仍会呈现。
【解决方案2】:

在 config/initializers/simple_form.rb 添加这一行:

config.label_text = lambda { |label, required| "#{label}" }

【讨论】:

  • 我必须从初始化字段中取消注释该行并在我的语言环境目录中的 yaml 文件中更改 html: ''。 FWIW,我将 simple_form 与设计和引导程序一起使用。不知道或认为这会有所不同
  • 我已经尝试了语言环境解决方案,但没有成功,但是这个解决了。我正在使用 simple_form 2.0.4
  • 使用 3.0-RC2,我使用了这个:config.label_text = lambda { |label, required, explicit_label| "#{标签}" }
  • 是否可以逐个删除星号?
  • 以下适用于 SimpleForm 3.5.0:lambda { |label, required, explicit_label| "#{label}" }。请注意包含 explicit_label 参数。
【解决方案3】:

我使用的是 Rails 3.1,我的 _form.html.erb 中针对给定模型有以下视图代码:

<div>
  <%= f.label :full_name %><br/>
  <%= f.text_field :full_name, :required => true %><br/>
</div>

如果您这样做,标签不会显示星号。除非您发布代码,否则我无法确定您的方法是什么,以及我的解决方案是否适合上述方法。

更新的答案: 听起来您从某人那里继承了此代码。无论如何,在阅读了您的代码示例之后,您肯定会使用 simple_form gem。可以在此处找到有关该宝石的信息https://github.com/plataformatec/simple_form。不过,要回答您的问题,如果您更改以下代码:

<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name", :required => false %>

那应该关闭星号。

我想补充一下,基于您对 simple_form 生成的 HTML 的厌恶,听起来您应该取消 gem 并使用 Rails 默认表单帮助程序重新编写您的表单代码,可以在此处阅读 @ 987654322@。根据代码库的大小,为了节省时间,你最好只是吸收它并学习如何使用 simple_form gem,但如果你认为你有时间改变它,那就去吧。

【讨论】:

  • 谢谢,我会尝试拆分它。目前我将它作为一条组合使用,可能是这个原因。
  • 没问题,如果这对您有用,请务必点赞并将其标记为已接受的答案,以便其他人受益。
  • 我不明白,出于某种原因,RoR 认为默认情况下所有字段都是必需的
  • @vsync:我已经更新了我的答案,以反映您在更新后的答案中提供的代码。这应该就是您所需要的,如果您需要其他帮助,请告诉我。
  • 我对这个答案投了赞成票,只有下周我办公室的其他开发人员回来时才能验证它。
【解决方案4】:

最简单的方法是用这个 css 隐藏它:

abbr[title="required"] {
  display: none;
}

【讨论】:

    【解决方案5】:

    它根本不是铁轨。这是simple_form 宝石。因此,如果您不想要所有的包装元素,请不要使用 simple_form。使用 Rails 表单 helpers。它会比定制你不喜欢的东西更简单。

    【讨论】:

    • 但是如果你想使用 simple_form 并且只想禁用星号呢?大部分来这个问题的人可能都在使用 simple_form 并希望保留它
    【解决方案6】:

    对于使用 Formtastic 并遇到此问题的任何人,您可以通过编辑配置文件来删除星号,该文件通常是 app/config/initializers/formtastic.rb

    更改此行:# Formtastic::SemanticFormBuilder.required_string = "(required)"

    成为:Formtastic::SemanticFormBuilder.required_string = ""

    更多信息here

    【讨论】:

      【解决方案7】:

      帮助我解决星号问题的代码:

      abbr[title="required"] {
        display: none;
      }
      

      选择的答案和其他要求更改语言环境文件中的 HTML 的建议有助于我使用最新的 Simple_form gem。

      【讨论】:

      • 在哪里添加这个代码,在一个简单的形式,引导配置?谢谢
      【解决方案8】:

      除了接受的答案中建议的全局配置外,您还可以将required: false 作为输入选项传递,或通过defaults: { required: false } 为整个表单设置它。

      【讨论】:

      • 其他人在 6 年前就已经在 answers 中说过这个了。你对这个老问题没有提供任何新的见解。
      • 是的,我做到了:如何为整个表单设置它。我的回答也很简短,很好。
      • 没错,你提到defaults的部分确实是新鲜的信息
      【解决方案9】:

      您可以将其从整个表单中删除:

      <%= simple_form_for @form, defaults: { required: false } do |f| %>
      

      【讨论】:

        【解决方案10】:

        我发现如果你只想删除它后面的星号(*)那么你所要做的就是去这个文件file /config/locales/simple_form.en.yml

        再一次,更改 gems 的配置文件和出于某种原因使用的东西不是一个好习惯,它总是一个问题,为什么你真的使用 simple_form!

        但例如,我发现了这一点,因为我们使用的 simple_form 有很多优点,但现在是一种更好的可用性实践,在非必填字段上加上星号,然后在必填字段上加上星号。

        【讨论】:

          【解决方案11】:

          您可以使用form_for,并覆盖config/initializer中的def label方法为必填字段添加星号,如下所示:

          def label(object_name, method, content_or_options = nil, options = nil, &block)
              if content_or_options.is_a?(Hash)
          
                content_or_options.each do |key, val|
                  options[key] = val
                end
          
                content_or_options = method.to_s
              end
          
              content_or_options ||= method.to_s
          
              presence_validations = [ActiveModel::Validations::PresenceValidator, ActiveRecord::Validations::PresenceValidator]
          
              class_obj = options[:object].class if options[:object]
              class_obj ||= object_name.to_s.camelize.constantize
          
              validations = class_obj.validators_on(method.to_s).map(&:class)
          
              if (presence_validations.map { |pv| validations.include?(pv) }).any?
                content_or_options += "*"
              end
          
              Tags::Label.new(object_name, method, self, content_or_options, options).render(&block)
          end
          

          如果您使用普通的form_for,并且使用validates_presence_of,则此方法会在所有必填字段后加上星号

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-19
            • 1970-01-01
            • 1970-01-01
            • 2015-12-23
            • 1970-01-01
            • 2018-10-03
            • 2011-06-03
            相关资源
            最近更新 更多