10.4 Getter- und Setter-Methoden 

In der Klasse Product haben wir keine Methoden definiert. Da die Klasse von ActiveRecord::Base erbt, stehen ihr alle Methoden der Klasse Base zur Verfügung:
Listing app/models/product.rb
class Product < ActiveRecord::Base end
Methoden für jedes Feld
Beim ersten Aufruf der Klasse definiert ActiveRecord automatisch für jedes Feld der zugehörigen Datenbanktabelle, in unserem Fall products, eine Methode zum Lesen, objekt.feldname, und eine zum Verändern, objekt.feldname=, des Feldes in der Klasse Product.
Die Methoden zum Lesen werden als Getter -Methoden und die Methoden zum Setzen von Werten als Setter -Methoden bezeichnet.
objekt.feldname?
Außerdem wird eine Methode definiert, mit der überprüft werden kann, ob das Feld leer ist:
objekt.feldname? product = Product.find(1) puts product.name # => "iPod nano 3G" product.name = "MacBook" product.name? # => true product.name = "" product.name? # => false product.name = nil product.name? # => false
read_attribute, write_attribute
Rails bietet auch eine alternative Möglichkeit, auf die Felder zuzugreifen. Mit der Methode read_attribute(:feldname) wird der Wert des angegebenen Feldes gelesen, und mit write_attribute(:feldname,wert) wird ein Wert im Feld gespeichert.
product = Product.find(1) puts product.read_attribute(:name) product.write_attribute(:name, "MacBook")
Diese Möglichkeit erscheint auf den ersten Blick etwas umständlich, da z. B. product.name viel kürzer ist als product.read_attribute(:name) . Die Methoden können aber eingesetzt werden, um die Standard-Getter- und Setter-Methoden zu überschreiben.
Überschreiben der Getter- und Setter-Methoden 

Die Standard-Getter- und Setter-Methoden kann man durch eigene Getter- und Setter-Methoden überschreiben.
Angenommen, wir möchten die Preise nicht in Euro, sondern in Cents speichern. Jedoch sollen weiterhin Euro-Beträge gesetzt und abgefragt werden. In diesem Fall muss der Betrag beim Speichern und Abfragen umgerechnet werden.
Listing app/models/product.rb
class Product < ActiveRecord::Base def price Product.read_attribute(:price)/100.0 end def price=(value) Product.write_attribute(:price, value*100) end end
Für die beiden Methoden read_attribute und write_attribute bietet ActiveRecord noch eine kürzere Schreibweise, indem man auf das self -Objekt mit einer Array-Syntax zugreift:
Listing app/models/product.rb
class Product < ActiveRecord::Base def price self[:price]/100.0 end def price=(value) self[:price] = value*100 end end
Automatische Typ-Erkennung 

Datenbank liefert Zeichenketten
ActiveRecord erhält sämtliche Daten aus der Datenbank als Zeichenketten und wandelt sie vor der Ausgabe in den in der Datenbank definierten Datentyp um (siehe Abschnitt kap_migraiton_datentypen). Dies wird besonders deutlich bei einem Feld vom Typ Boolean. Wenn in einem Boolean-Feld der Wert »0« aus der Datenbank gelesen wird, so wandelt das ActiveRecord in false um. Entsprechend wird der Wert »1« in true umgewandelt.
Es ist möglich, den Wert mit der Methode feldname_before_type_cast abzufragen, bevor ActiveRecord die Typumwandlung durchführt.
>> product.enabled
=> true
>> product.enabled_
before_type_cast
=> "1"
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.