Validations und virtuelle Attribute
Eingetragen von Martin Maciaszek
Manchmal möchte ich (virtuelle) Attribute im Model haben, die sich nicht 1:1 auf Spalten in einer Tabelle abbilden lassen. Ein gutes Beispiel dafür ist mein Machine-Model. In dem Model möchte ich unter anderem das Baujahr der Maschine festhalten. Dies könnte ich zwar auch einfach als ein Integer in der Datenbank speichern, doch für diverse Datumsberechnungen habe ich mich dazu entschlossen, das Baujahr als Datum (jeweils als den 1. Januar des Jahres) zu speichern. Das Baujahr habe ich zu einem virtuellen Attribut es Models gemacht. Das ganze sieht dann so aus.
class Machine < ActiveRecord::Base
def build_year
read_attribute(:built_on).year if read_attribute(:built_on)
end
def build_year=(year)
write_attribute(:built_on, Date.new(year.to_i, 1, 1)) unless year.empty?
end
end
Damit läßt sich nun build_year wie jedes andere Attribut des Models in Views verwenden. Wie wäre es noch mit Validations? Hierzu habe ich folgende validate-Methode gebaut.
def validate
errors.add(:build_year, "can't be blank") unless build_year.is_a?(Fixnum)
errors.add(:build_year, "must be after 1944") if build_year && build_year<1945
errors.add(:build_year, "can't be in the future") if build_year && build_year>Date.today.year
end
Damit wird mein virtuelles Attribut nun auch entsprechend im View hervorgehoben, wenn die Validation fehlschlägt.

auf del.icio.us speichern
zu Mister Wong hinzufügen