Les noms « Forcer humanisés » des champs à être en minuscule dans Rails 3
-
27-10-2019 - |
Question
Pour autant que je sache, la façon acceptée de définir les noms « humanisés » des champs dans Rails 3 est d'utiliser les paramètres régionaux:
# config/locales/en.yml
en:
activerecord:
attributes:
member:
username: 'username' # rather than 'Username'
Cependant, je veux simplement Rails 3 à utiliser les versions minuscules de ses noms humanisé par défaut. Y at-il un moyen facile, intégré façon de le faire?
Un exemple pour aider à clarifier: Lorsque l'intérieur d'un form_for
, <%= f.label :username %>
affiche « Nom d'utilisateur » par défaut. Je veux afficher « nom d'utilisateur ».
La solution
Les valeurs par défaut d'aide à l'utilisation de label
human_attribute_name transformer un attribut en un nom humain. Si vous regardez la source, human_attribute_name
essaie quelques petites choses avant de retomber à attributes.to_s.humanize
. Il essaie la traduction d'abord, puis il recherche une option :default
dans le hachage d'options.
Alors, le plus simple / meilleure façon d'obtenir la fonctionnalité que vous voulez est de passer outre human_attribute_name
avec votre propre qui offre une option :default
puis appelle l'original. Rails fournit un moyen raisonnable de faire ce genre de chose avec alias_method_chain
, alors ...
Je l'ai assez entendu, me donner la réponse!
Mettez ce qui suit dans un fichier dans config/initializers
et redémarrez votre application:
module ActiveModel
module Translation
def human_attribute_name_with_foo attribute, options = {}
human_attribute_name_without_foo attribute, options.merge( :default => attribute.humanize.downcase )
end
alias_method_chain :human_attribute_name, :foo
end
end
Autres conseils
J'ai eu le même problème. Je l'ai résolu via css:
En foo.html.erb:
<%= f.label :username, :class => "my_class" %>
En bar.css:
label.my_class {
text-transform: lowercase;
}
Je préfère une autre solution aussi. Mais c'est le seul que je suis en mesure de trouver, à ce jour.