Ruby on Rails - Kann ich den Wert eines Attributs ändern, bevor sie aufgerufen wird?
-
05-07-2019 - |
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 .
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
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“.