Erzwingen, dass "humanisierte" Namen von Feldern in Rails 3 in Kleinbuchstaben geschrieben werden
-
27-10-2019 - |
Frage
Soweit ich weiß, besteht die akzeptierte Methode zum Festlegen der "humanisierten" Namen von Feldern in Rails 3 darin, Gebietsschemas zu verwenden:
# config/locales/en.yml
en:
activerecord:
attributes:
member:
username: 'username' # rather than 'Username'
Ich möchte jedoch einfach, dass Rails 3 Kleinbuchstaben seiner humanisierten Standardnamen verwendet.Gibt es eine einfache, integrierte Möglichkeit, dies zu tun?
Ein Beispiel zur Verdeutlichung: In einem form_for
zeigt <%= f.label :username %>
standardmäßig "Benutzername" an.Ich möchte, dass "Benutzername" angezeigt wird.
Lösung
Der label
-Helfer verwendet standardmäßig human_attribute_name toVerwandle ein Attribut in einen menschlichen Namen.Wenn Sie sich die Quelle ansehen, versucht human_attribute_name
einige Dinge, bevor Sie auf attributes.to_s.humanize
zurückgreifen.Zuerst wird die Übersetzung versucht, und dann wird im Options-Hash nach einer :default
-Option gesucht.
Der einfachste / beste Weg, um die gewünschte Funktionalität zu erhalten, besteht darin, human_attribute_name
mit Ihrem eigenen zu überschreiben, der eine :default
-Option bietet, und dann das Original aufzurufen.Rails bietet eine vernünftige Möglichkeit, solche Dinge mit alias_method_chain
zu tun, also ...
Ich habe genug gehört, gib mir einfach die Antwort!
Fügen Sie Folgendes in eine beliebige Datei in config/initializers
ein und starten Sie Ihre App neu:
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
Andere Tipps
Ich hatte das gleiche Problem. Ich habe es über CSS gelöst:
In foo.html.erb:
<%= f.label :username, :class => "my_class" %>
In bar.css:
label.my_class {
text-transform: lowercase;
}
Ich würde auch eine andere Lösung bevorzugen.Aber das ist der einzige, den ich bisher finden konnte.