2010-11-27 14 views
0

Bei einem virtuellen Verbundattribut in einem Rails 3.0.3-Modell können Fehler für Komponentenattribute automatisch auf das Attribut composite gesetzt werden. Zum Beispiel:Attributattribute für mehrere Spalten

validates_presence_of :first_name 
validates_presence_of :last_name 

def name 
    "#{first_name} #{last_name}" 
end 

def name=(name) 
    first_name, last_name = name.split 
end 

Gibt:

@model.errors[:name] = @model.errors[:first_name] + @model.errors[:last_name]

Bitte beachten Sie, dass dies ein vereinfachtes Beispiel ist, und ich kann nicht einfach die Validierungen bewegt sich von der Komponente in eine neue Validierungsmethode für die Composite-Attribut Attribut.

Ein weiteres Beispiel ist das Paperclip-Juwel, in dem die Validierung der Größe (attachment_size) auf das Attribut 'attachment' gesetzt wird. Irgendwelche Ideen?

Danke.

Antwort

0

endete mit:

after_validation do 

    self.errors[:first_name].each do |message| 
    self.errors.add(:name, message) 
    end 

    self.errors[:last_name].each do |message| 
    self.errors.add(:name, message) 
    end 

    self.errors.delete(:first_name) 
    self.errors.delete(:last_name) 

end 
0

Persönlich hätte ich keine "normalen" Validierungen auf den first_name und last_name Feldern. Stattdessen würde ich es in den Händen eines benutzerdefinierten Validator verlassen:

validate :name_is_valid 

def name_is_valid 
    if first_name.blank? || last_name.blank? 
    errors.add(:name, "You must specify both your first and last name") 
    end 
end 
+0

Hey Ryan. Entschuldigung, um mein Beispiel zu verdeutlichen ist viel komplexer als das obige. Ich suche eigentlich nach etwas, das näher daran ist, wie "Paperclip" die Anhangsgröße, den Anhangstyp usw. überprüft und alle Validierungen zum Basisattribut hinzufügt (aber ich konnte es beim Lesen der Quelle nicht herausfinden). Ich werde das obige aktualisieren, um klarer zu sein. –

Verwandte Themen