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?
Dans config/initializers/simple_form.rb, ajoutez cette ligne:
config.label_text = lambda { |label, required| "#{label}" }
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.
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.
Le moyen le plus simple est de le cacher avec ce css:
abbr[title="required"] {
display: none;
}
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.
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.
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 .
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.
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
.
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.