Ich habe eine Anwendung, die Abwesenheitsdatensätze für Angestellte enthält.Schienen validieren Eindeutigkeit der Datumsbereiche
Ich muss sicherstellen, dass die Anfangs- und Enddaten für jeden Datensatz nicht überlappen.
Wenn ich zum Beispiel einen Abwesenheitsdatensatz eingegeben habe, der heute begann und morgen endete, sollte es nicht möglich sein, einen anderen innerhalb dieses Datumsbereichs einzugeben. Also konnte ich keinen machen, der am Vortag beginnt und dann übermorgen oder später ausläuft.
Um es einfach auszudrücken, muss ich den Datumsbereich einzigartig machen.
Was ist der beste Weg, dies zu erreichen?
Benutzerdefinierte Validatoren in der Modellklasse, bei denen alle Datensätze durchlaufen werden, sind viel zu lang und ich habe keine Edelsteine gefunden, die dieses Problem beheben. Ich habe auch keinen einfachen Weg gefunden, um durch die Einzigartigkeit im Modell zu erreichen. Ich bin ratlos:/
Danke für Ihre Zeit!
Edit:
class Absence < ActiveRecord::Base
attr_accessible :date, :date_ended, :status, :reason, :form, :user_id, :tempuser, :company_id
belongs_to :user
default_scope { where(company_id: Company.current_id) }
validates :date, :date_ended, :status, :reason, :form, :user_id, presence: true
validates_numericality_of :user_id, :only_integer => true, :message => "can only be whole number."
end
Möglicherweise durch Erstellen eines Modells zum Aufzeichnen verwendeter Daten? So etwas wie EmployeeAbsenzDate. Dies wäre schneller als das Iterieren aller Datensätze. – Edward