Как отключить звездочку в обязательных полях формы?

когда я добавляю атрибут "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 в партию.

Как я могу предотвратить это?

10 ответов


в config / initializers / simple_form.РБ добавить эту строку:

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

вы можете просто установить требуемую метку в пустое значение в файле локали simple_form:

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

или используйте CSS, чтобы скрыть его.


Я использую Rails 3.1, и у меня есть следующий код представления в моей _form.формат html.erb для данной модели:

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

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

Обновленный Ответ: Похоже, вы унаследовали этот код от кого-то. Во всяком случае, после прочтения примера кода Вы определенно используете драгоценный камень simple_form. Информация об этом камне можно узнать здесь https://github.com/plataformatec/simple_form. Чтобы ответить на ваш вопрос, если вы измените свой код следующим образом:

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

это должно отключить звездочку.

Я бы добавил, основываясь на вашем отвращении к HTML, сгенерированному из simple_form, похоже, что вы должны просто покончить с драгоценным камнем и переписать свой код формы, используя помощники формы Rails по умолчанию, о которых можно прочитать здесь http://guides.rubyonrails.org/form_helpers.html. В зависимости от размера базы кода, вам может быть лучше просто сосать его и учиться использовать драгоценный камень simple_form ради экономии времени, но если вы думаете, что у вас есть время, чтобы изменить все это, идите на это.


самый простой способ-скрыть его с помощью этого css:

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

Это вообще не рельсы. Это simple_form камень. Поэтому, если вы не хотите, чтобы все элементы упаковки не использовать simple_form. Используйте форму Rails прислуга. Это было бы проще, чем настроить то, что вам не нравится.


для тех, кто использует Formtastic и имеет эту проблему, вы можете удалить звездочки, отредактировав файл конфигурации, который обычно app / config / инициализаторы / formtastic.rb.

измените эту строку: # Formtastic::SemanticFormBuilder.required_string = "(required)"

будет: Formtastic::SemanticFormBuilder.required_string = ""

Подробнее здесь.


код, который помог мне решить проблему звездочка:

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

выбранный ответ и другие предложения с просьбой изменить HTML в файле locales dint помогают мне с последним simple_form gem.


помимо глобальной конфигурации, предложенной в принятом ответе, вы можете передать required: false в качестве опции ввода или defaults: { required: false } чтобы установить его для всей формы.


я узнал, что если вы хотите удалить звездочку(*) за ней, то все, что вам нужно сделать, это перейти к этому файлу file /config/locales/simple_form.en.yml

еще раз не является хорошей практикой, чтобы изменить файлы конфигурации для драгоценных камней и что-то ваше использование по какой-то причине, это всегда вопрос, почему вы действительно используете simple_form!

но, например, я узнал об этом, потому что есть большие вещи о simple_form мы используем, но в настоящее время это лучшая практика юзабилити, чтобы иметь звездочки на полях none required затем обязательные.


можно использовать form_for и переопределить метод def label на config/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