Frage

Lassen Sie sich sagen, ich habe dieses Modell mit dem Namen Produkt mit einem Feld mit dem Namen Marke . Angenommen, die Werte von Marke wird im Format gespeichert this_is_a_brand . Kann ich eine Methode im Modell (oder anderswo) definieren, die mir den Wert von Marke , bevor sie aufgerufen wird, ändern kann. Zum Beispiel, wenn ich rufe @ product.brand , ich will bekommen Dies ist eine Marke , anstelle von this_is_a_brand .

War es hilfreich?

Lösung

Ich würde empfehlen, die eckige Klammer Syntax ([] und []=) statt read_attribute und write_attribute verwenden. Die eckige Klammer Syntax ist kürzer und wickeln entwickelt, um die geschützt lesen / write_attribute Methoden .

def brand
  original = self[:brand]
  transform(original)
end

def brand=(b)
  self[:brand] = reverse_transform(b)
end

Andere Tipps

Anstatt @attributes direkt zugreifen, sollten Sie read_attribute und write_attribute verwenden:

def brand
  b = read_attribute(:brand) 
  b && b.transform_in_some_way
end

def brand=(b)
  b && b.transform_in_some_way
  write_attribute(:brand, b)
end

Wie die letzte Antwort vor 7 Jahren geschrieben wurde, werde ich beitragen, was die Rails API derzeit vermuten lässt.

def brand
  super.humanize
end

Humanize Umdrehungen 'this_is_a_brand' auf ‚Diese ist eine Marke "

In Ihrem Modell können Sie den Methodenaufruf brand außer Kraft setzen.

def brand
#code to modify the value that is stored in brand
return modified_brand
end

Dies ermöglicht es als this_is_a_brand gespeichert werden. Aber, wird es wieder als „dies ist eine Marke“.

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