web-dev-qa-db-fra.com

Rails: Comment désactiver l'astérisque dans les champs obligatoires du formulaire?

Quand j'ajoute l'attribut 'Required'
Aux champs d’entrée HTML, Rails ajoute 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 que cela enveloppe tout dans une DIV et ajoute un élément ABBR à la fête.

Comment puis-je empêcher cela?

36
vsync

Dans config/initializers/simple_form.rb, ajoutez cette ligne:

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

Vous pouvez simplement définir la marque requise sur 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
RocketR

J'utilise Rails 3.1 et j'ai le code d'affichage 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 n'affiche pas d'astérisque si vous le faites de cette façon. À moins que vous ne postiez le code, je ne peux pas être sûr de votre approche et de la pertinence de ma solution.

Réponse mise à jour: On dirait que vous avez hérité de ce code de quelqu'un. Quoi qu'il en soit, après avoir lu votre exemple de code, vous utilisez très certainement le joyau simple_form. Des informations sur cette gemme sont disponibles ici https://github.com/plataformatec/simple_form . Pour répondre à votre question cependant, si vous modifiez votre code, procédez 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 que, sur la base de votre dégoût pour le code HTML généré par simple_form, il semblerait que vous deviez simplement supprimer la gemme et réécrire votre code de formulaire à l'aide des aides de formulaire par défaut de Rails, qui peuvent être lues ici http: //guides.rubyonrails.org/form_helpers.html . En fonction de la taille de la base de code, il serait peut-être préférable de tout simplement l'apprécier et apprendre à utiliser le joyau simple_form pour gagner du temps, mais si vous pensez avoir le temps de tout changer, foncez.

20
Lester Peabody

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

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

Ce n'est pas du tout Rails. C'est le simple_form gem. Donc, si vous ne voulez pas que tous les éléments d'habillage n'utilisent pas simple_form. Utilisez la forme Rails helpers . Ce serait plus simple que de personnaliser quelque chose que vous n'aimez pas.

5
lucapette

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

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

La réponse choisie et les autres suggestions demandant de modifier le fichier HTML dans le fichier de paramètres régionaux m'aident avec le dernier bijou Simple_form.

3
Cybergenie

Si vous utilisez Formtastic et rencontrez ce problème, vous pouvez supprimer les astérisques en modifiant le fichier de configuration, qui est généralement app/config/initializers/formtastic.rb.

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

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

Plus d'infos ici .

3
Aaron Gray

Outre la configuration globale suggérée dans la réponse acceptée, vous pouvez passer required: false en tant qu'option d'entrée ou defaults: { required: false } pour le définir pour l'ensemble du formulaire.

2
inopinatus

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

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 place un astérisque après tous les champs obligatoires, si vous avez utilisé form_for normal et validates_presence_of.

0
Mohamed Yakout

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

encore une fois, ce n’est pas une bonne pratique de changer vos fichiers de configuration en gems et de les utiliser pour une raison quelconque, il est toujours question de savoir pourquoi utilisez-vous vraiment simple_form! 

Mais, par exemple, j’ai découvert cela parce que nous utilisons beaucoup de choses simples mais qu’il est de nos jours plus facile d’utiliser des astérisques dans les champs non obligatoires que requis.

0
andre.orvalho