41

当我将 'Required' 属性添加
到 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 元素。

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

4

11 回答 11

49

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

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

或者使用 CSS 来隐藏它。

于 2011-10-05T11:46:13.690 回答
35

In config/initializers/simple_form.rb add this line:

config.label_text = lambda { |label, required| "#{label}" }
于 2013-01-02T19:03:26.917 回答
22

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

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

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

更新的答案:听起来您从某人那里继承了此代码。无论如何,在阅读了您的代码示例之后,您肯定会使用 simple_form gem。可以在此处找到有关该 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 默认表单帮助程序重新编写您的表单代码,可以在此处阅读http:// guides.rubyonrails.org/form_helpers.html。根据代码库的大小,为了节省时间,你最好只是吸收它并学习如何使用 simple_form gem,但如果你认为你有时间改变它,那就去吧。

于 2011-10-04T16:32:36.200 回答
15

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

abbr[title="required"] {
  display: none;
}
于 2014-11-03T21:00:00.397 回答
5

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

于 2011-10-05T11:39:59.413 回答
4

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

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

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

更多信息在这里

于 2013-05-31T20:05:51.100 回答
3

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

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

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

于 2015-01-30T10:50:34.113 回答
2

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

<%= simple_form_for @form, defaults: { required: false } do |f| %>
于 2019-03-18T18:12:48.657 回答
2

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

于 2017-09-05T22:20:54.993 回答
0

您可以使用form_for, 和覆盖方法def labelconfig/initializer必填字段添加星号,如下所示:

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

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

于 2014-08-11T08:59:34.937 回答
0

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

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

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

于 2012-10-18T09:22:39.157 回答