Comment désactiver l'astérisque sur les champs obligatoires du formulaire?

Quand j'ajoute l'attribut' Required '
pour les champs de saisie html, Rails pré-pend un astérisque ( * ) avant l'étiquette.

Est-ce que quelqu'un sait comment empêcher cela?

Pour une raison quelconque Rails transforme ceci:

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

Dans ceci:

<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>

Je n'aime pas qu'il enveloppe tout dans un DIV et ajoute un élément ABBR à la fête.

Comment puis-je empêcher cela?

32
demandé sur Martin Bonner 2011-10-04 19:56:48

10 réponses

Dans config / initializers / simple_form.RB ajouter cette ligne:

config.label_text = lambda { |label, required| "#{label}" }
29
répondu Shane Andrade 2013-01-02 19:03:26

Vous pouvez simplement définir la marque requise sur la valeur vide dans le fichier de paramètres régionaux de simple_form:

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

Ou utilisez CSS pour le cacher.

46
répondu RocketR 2011-10-05 11:46:13

J'utilise Rails 3.1, et j'ai le code de vue suivant dans mon _form.HTML.erb pour un modèle donné:

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

L'étiquette ne montre pas d'astérisque si vous le faites de cette façon. Sauf si vous postez du code, Je ne peux pas être sûr de votre approche et si ma solution correspondrait à cette approche.

Réponse Mise À Jour: On dirait que vous avez hérité de ce code de quelqu'un. En tout cas, après avoir lu votre exemple de code, vous utilisez certainement la gemme simple_form. Informations sur ce bijou peut être trouvé ici https://github.com/plataformatec/simple_form . pour répondre à votre question, si vous modifiez votre code comme suit:

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

Cela devrait désactiver l'astérisque.

J'ajouterais, en fonction de votre dégoût pour le HTML généré à partir de simple_form, il semble que vous devriez simplement supprimer la gemme et réécrire votre code de formulaire en utilisant les aides de formulaire par défaut Rails, qui peuvent être lues ici http://guides.rubyonrails.org/form_helpers.html . Selon la taille de la base de code, il serait peut-être préférable de la sucer et d'apprendre à utiliser la gemme simple_form pour gagner du temps, mais si vous pensez avoir le temps de tout changer, allez-y.

19
répondu Lester Peabody 2011-10-05 16:39:26

Le moyen le plus simple est de le cacher avec ce css:

abbr[title="required"] {
  display: none;
}
13
répondu VoA 2014-11-03 21:00:00

Ce n'est pas du tout des rails. C'est la gemme simple_form. Donc, si vous ne voulez pas que tous les éléments d'emballage n'utilisent pas simple_form. Utiliser les Rails de la forme aides. Ce serait plus simple que de personnaliser quelque chose que vous n'aimez pas.

5
répondu lucapette 2011-10-05 11:39:59

Pour toute personne utilisant Formtastic et ayant ce problème, vous pouvez supprimer les astérisques en éditant le fichier de configuration, qui est généralement app / config / initializers / formtastic.rb .

Modifier cette ligne: # Formtastic::SemanticFormBuilder.required_string = "(required)"

Être: Formtastic::SemanticFormBuilder.required_string = ""

Plus d'infos ici.

3
répondu Aaron Gray 2013-05-31 20:05:51

Code qui m'a aidé à résoudre le problème de l'astérisque:

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

La réponse choisie et les autres suggestions demandant de changer le HTML dans les paramètres régionaux du fichier dint m'aident avec la dernière gemme Simple_form.

3
répondu Cybergenie 2015-01-30 10:50:34

En dehors de la configuration globale suggérée dans la réponse acceptée, vous pouvez passer {[0] } en option d'entrée, ou defaults: { required: false } pour le définir pour l'ensemble du formulaire.

1
répondu inopinatus 2017-09-07 00:14:01

J'ai découvert que si vous souhaitez supprimer l'astérisque(*) derrière elle, puis tout ce que vous avez à faire est d'aller à ce fichier file /config/locales/simple_form.en.yml

Une fois de plus n'est pas une bonne pratique pour changer vos fichiers de configuration pour les gemmes et quelque chose que vous utilisez pour une raison quelconque, c'est toujours une question de pourquoi utilisez-vous vraiment simple_form!

Mais par exemple, j'ai découvert cela parce qu'il y a de grandes choses à propos de simple_form que nous utilisons, mais de nos jours, c'est une meilleure pratique d'utilisation pour avoir les astérisques aucun champs requis alors ceux requis.

0
répondu andre.orvalho 2012-10-18 09:25:53

Vous pouvez utiliser form_for et remplacer la méthode def label dans config/initializer pour ajouter un astérisque pour les champs obligatoires suivants:

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

Cette méthode met l'astérisque après tous les champs obligatoires, si vous avez utilisé normale form_for, et utilisé validates_presence_of

0
répondu Mohamed Yakout 2014-08-11 08:59:34