Ich habe zwei Modelle ...# Validierungen von aktiven Datensätzen:: Wie validiert man Datumsattribute in Rails (custom_validations)?
models/Resident.rb: has_many: Blätter
models/leave.rb: belongs_to: resident
Nun, was ich Sie möchten die Modellattribute validieren, bevor sie erstellt werden.
leave.rb Attribute: start_date, end_date, Ziel
hier ist mein Urlaub Modell:
class Leave < ActiveRecord::Base
belongs_to :resident
validates :destination,presence:true
validates :end_date,presence: true
validates :start_date,presence: true
before_create :check_correct_leave
private
def check_correct_leave
if resident.hostel.hostel=='J'
(self.end_date - self.start_date).to_i == 4 || (self.end_date - self.start_date).to_i == 5
else
errors.add(:start_date, "Leave are granted only 4 or 5 days")
end
end
end
I check_correct_leave Methode auch überprüfen wollen -> wenn die Bewohner haben bereits einen Urlaub (gespeichert in einem Urlaubsmodell) von diesem einen Monat (Monat bedeutet Jan, Feb, etc) dann sollte es einen Fehler erzeugen, der:
"Sie können nicht markieren verlassen, weil Sie schon für diesen Monat markiert haben" und Modell sollte nicht speichern lassen. Danke!
es funktioniert aber ich bin immer Flash-Fehler von meinem Controller: 'def erstellen @ leave = current_user.resident.leaves.create (leave_params) wenn @ leave.save flash [: info] = "erfolgreich markiert Leave" redirect_to leaves_path sonst flash [: danger] = "Markiere deinen Urlaub wieder (kein gültiger Urlaub)!" redirect_to new_leave_path Ende end' ** flash [: Gefahr] = "! Markieren Sie Ihre wieder verlassen (kein vaild Leave)" ** dies ein Fehler .. –
, wenn Sie die Fehlermeldung angezeigt werden soll hinzugefügt, du kannst flash [: danger] in 'flash [: danger] = @ leave.errors.full_messages.first' ändern –
yeah das funktioniert, aber wenn ich einen urlaub mache zeigt es mir einen fehler -> ** Du kannst ' t markiere Urlaub da du bereits für diesen Monat markiert hast ** aber der Urlaub wird in der Datenbank gespeichert !! wie man es repariert ? –