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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top