Ich erstellte ein Modell: Vortrag (start_time, end_time, location). Ich möchte Validierungsfunktionen schreiben, um zu überprüfen, ob sich die Zeit der neuen Vorlesung mit gespeicherten Vorlesungen in der Datenbank überschneidet. So kann ich herausfinden, ob der Ort in dieser Zeit besetzt ist. Meine Funktion ist:Wie Überprüfungszeit Überlappungen in Schienen
class Lecture < ActiveRecord::Base
validates :title, :position, presence: true
validates :start_time, :end_time, format: { with: /([01][0-9]|2[0-3]):([0-5][0-9])/,
message: "Incorrect time format" }
validate: time_overlap
def time_overlap
Lecture.all.each do |user|
if (user.start_time - end_time) * (start_time - user.end_time) >= 0
errors.add(:Base, "time overlaps")
end
end
end
end
Die Fehlermeldung: NoMethodError in LecturesController # erstellen nicht definierte Methode `- @‘ für nil: NilClass. Wie schreibe ich diese Funktion im richtigen Format?
Sie erwähnten, Sie bekommen Fehler in Ihrem Controller und haben noch nicht den Controller-Code hinzugefügt ?? – Alfie
Sie haben einen Tippfehler in der 'create' Methode Ihrer' lectures_controller.rb' (die Sie übrigens vernachlässigt haben). Abgesehen davon ist Ihre Herangehensweise an Zeitkonflikte ineffizient. Anstatt alle Vorlesungen aus der Datenbank zu laden und sie in Ruby zu vergleichen, erstellen Sie am besten eine Abfrage, die Vorlesungen mit start_time new_lecture.end_time auswählt. Machen Sie im Anwendungscode nicht, was Ihre Datenbank für Sie tun kann. –
MarsAtomic
Der Controller funktioniert gut ohne time_overlap Funktion, ich verstehe einfach nicht, was '' undefined Methode '- @ 'für nil: NilClass" in diesem Fall. Ich denke, mein Code in time_overlap hat falsche Ruby Stil. Ich hoffe, zu überprüfen, ob Zeit überschneidet sich mit korrektem Code – runchu