Domanda

Per quanto ne so, il modo accettato per impostare i nomi "umanizzati" dei campi in Rails 3 è usare le impostazioni locali:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      member:
        username: 'username' # rather than 'Username'

Tuttavia, voglio semplicemente che Rails 3 utilizzi versioni minuscole dei suoi nomi umanizzati predefiniti.Esiste un modo semplice e integrato per farlo?

Un esempio per aiutare a chiarire: quando si trova all'interno di un form_for, <%= f.label :username %> visualizza "Username" per impostazione predefinita.Voglio che visualizzi "nome utente".

È stato utile?

Soluzione

L'helper label utilizza per impostazione predefinita human_attribute_name pertrasformare un attributo in un nome umano.Se guardi l'origine, human_attribute_name prova alcune cose prima di tornare a attributes.to_s.humanize.Prima prova la traduzione, quindi cerca un'opzione :default nell'hash delle opzioni.

Quindi, il modo più semplice / migliore per ottenere la funzionalità che desideri è sovrascrivere human_attribute_name con il tuo che fornisce un'opzione :default e quindi chiama l'originale.Rails fornisce un modo ragionevole per fare questo genere di cose con alias_method_chain, quindi ...

Ho sentito abbastanza, dammi solo la risposta!

Inserisci quanto segue in qualsiasi file in config/initializers e riavvia la tua app:

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

Altri suggerimenti

Ho avuto lo stesso problema. L'ho risolto tramite css:

In foo.html.erb:

<%= f.label :username, :class => "my_class" %>

In bar.css:

label.my_class {
    text-transform:   lowercase;
}

Preferirei anche una soluzione diversa.Ma è l'unico che sono riuscito a trovare finora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top