2011-01-12 13 views
2

Ich würde gerne wissen, ob ich eine Validierung schreiben kann, die die Eindeutigkeit eines Datensatzes basierend auf mehreren Feldern validieren würde. Mein Modell hat einen zusammengesetzten Primärschlüssel, das heißtWie validieren Sie Modelle mit einem zusammengesetzten Schlüssel in ActiveRecord?

field :houseno, :type => String 
field :street, :type => String 
field :boro, :type => String 

Was eine gute Möglichkeit der Validierung der Einzigartigkeit dieser Rekord wäre?

Ich versuche, benutzerdefinierte Validatoren wie folgt zu verwenden:

class AddressValidator < ActiveModel::Validator 

    def validate(record) 
    record.errors[:base] << "This address is already in our records." unless check(record) 
    end 

    private 
    def check(record) 
     Address.find(:street=>record.street,:houseno=>record.houseno,:boro=>record.boro).length > 0 
    end 
end 

Antwort

10

funktionierts?

validates_uniqueness_of :houseno, :scope => [:street, :boro] 
+1

Danke, das funktioniert sehr gut. Sie können auch als validates ausdrücken: Hausno,: Länge => {: Minimum => 1,: Maximum => 6,: allow_blank => false,: allow_nil => true},: Eindeutigkeit => {: scope => [: Straße,: Boro]} – Avishai

Verwandte Themen