Forzare i nomi "umanizzati" dei campi a essere minuscoli in Rails 3
-
27-10-2019 - |
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".
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.