2012-04-13 1 views
1

ich erstellt eine benutzerdefinierte Validierung bin versucht, dass ein Zeitplan für das Startdatum und Enddatum prüft nicht mit einem anderen Zeitplan überlapptRails 3 Benutzerdefinierte Validierung

class Schedule < ActiveRecord::Base 
#has many scheduleTimes (fk in scheduleTime) 
has_many :scheduletimes, :inverse_of => :schedule 

validate :dateOverlaps? 

scope :active, lambda { 
where('? between start_date and end_date', Date.today) 
} 
def dateOverlaps? 
    results = ActiveRecord::Base.connection.execute("Select (start_date::DATE, end_date::DATE) OVERLAPS ('#{self.start_date}'::DATE, '#{self.end_date}'::DATE) from schedules;") 
    errors.add_to_base("Date ranges cannot overlap with another schedule") if     results.first["overlaps"] == 't' 
end 

verursacht jedoch dieses

NoMethodError: undefined method `add_to_base' 

Ich habe versucht, Erstellen eines benutzerdefinierten Validators und Verwenden der privaten Validierungsmethode ohne Erfolg. Könnte mir jemand etwas Licht dazu bringen?

+1

Nur ein kurzer Kommentar, Ihre Methode respektiert Rubys Konvention nicht. "dateOverlaps" sollte "date_overlaps" heißen. – jhchabran

Antwort

9

Versuchen Sie, diese zu ersetzen:

errors.add_to_base("Date ranges cannot overlap with another schedule") 

mit diesem:

errors.add(:base, "Date ranges cannot overlap with another schedule") 
1

Statt:

errors.add_to_base 

Versuchen Sie es mit:

errors.add