Trocknen Views in Rails (number_to_currency)
Habe ich einen ähnlichen code wie:
number_to_currency(line_item.price, :unit => "£")
littering meine Ansichten in verschiedenen Modellen. Da meine Anwendung die sich nur in GBP (£), sollte ich mich nicht bewegen dieses in jedem meiner Modelle, so dass line_item.price
gibt den string zurück, so wie es sein sollte (D. H. number_to_currency(line_item.price, :unit => "£")
und line_item.price
sind die gleichen. Ich denke, dass, um dies zu tun ich sollte:
def price
number_to_currency(self.price, :unit => "£")
end
aber das funktioniert nicht. Wenn price
ist bereits im Modell definiert, dann Schienen Berichte "stack level too deep', wenn ich def price
zu def amount
, dann beschwert es sich, dass number_to_currency
ist nicht definiert?
- Ist es nicht mehr TROCKEN, wenn Sie konnte einfach legen Sie die Standard-Einheit in GBP und verwenden number_to_currency direkt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
number_to_currency ist ein view-helper, also es ist nicht verfügbar in den Modellen.
Sie sparen könnten einige Tastendrücke durch die Definition Ihrer eigenen Helfer in application_helper.rb (so es verfügbar ist, um alle Ansichten). ZB
Dann rufen Sie es in Aussicht:
Wenn Sie die Standardeinstellung ändern möchten für Ihre ganze Anwendung, Bearbeiten Sie config/locales/en.yml
Mine sieht wie folgt aus:
Alles außer das Gerät ist optional und wird wieder die Standardeinstellung, aber ich habe es in, so weiß ich, welche Werte ich ändern kann. Sie können auch das £ - Zeichen anstelle von £.
ActionView::Helpers::NumberHelper number_to_currency()
gibt ein Beispiel, wo die Einstellung:locale => "fr"
verpasst dem Trennzeichen und Trennzeichen und Währungssymbol position. Dies war nicht für mich arbeiten, aber durch das hinzufügen einerconfig/locales/fr.yml
mit den Einstellungen wie oben, es begann zu arbeiten.Den Grund für die stack level too deep Fehler ist, dass, wenn Sie sagen
self.price
imprice
- Methode erstellen Sie einen endlosen rekursiven Aufruf auf Ihr Preis-Methode, wie Sie nun übersteuert die normale accessor-Methode. Um dies zu vermeiden, müssen Sie den Zugriff auf den Wert des Preises-Feld mit dem Attribut-hash. z.B. so etwas wie:außer der Tatsache, dass
number_to_currency
ist nicht verfügbar in der Modell-code für den Grund, Larry K beschreibt.Hier war mein Ansatz zu diesem problem ..
in Ihre Modelle, die Sie dies tun können (und Sie nicht verschmutzen Ihr Modell mit Methoden, die Sie nicht verwenden)
dann für Ihre Ansichten zu allen aktualisiert werden, gehören das Modul in einem Ihrer app-Helfer
Nun überall verwenden Sie die Zahl in Währung Helfer wird es formatiert werden, mit einem Pfund-symbol, aber Sie haben auch alle Möglichkeiten der ursprünglichen Schienen-Methode, damit Sie Sie übergeben können, die Optionen, wie du vor hast ..
wird es zu konvertieren zurück zu einem dollar-symbol.
Die andere Antwort in Bezug auf ein anderes Helfer-Methode Gegenleistung(Preis) zu vereinfachen, die Wiederholung ist wahrscheinlich der beste Ansatz.. aber.. wenn Sie WIRKLICH wollen, um access-Ansicht Helfer in das Modell, das Sie tun können, so etwas wie:
dann sollten Sie in der Lage, dies zu tun in der model-Klasse:
Wie von Rails 3
Als Larry K beschreibt, aber mit diesem edit: