Erzwingen, dass "humanisierte" Namen von Feldern in Rails 3 in Kleinbuchstaben geschrieben werden

StackOverflow https://stackoverflow.com/questions/4846841

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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top