2016-05-02 20 views
-1

Das ist mein Modell ist -Rails 4 - Benutzerdefinierte Validierungsfehler

class Leave < ActiveRecord::Base 
belongs_to :staff 
validates :staff, :leave_type, :start_date, :end_date, :number_of_days, :approved_by, presence: true 
enum leave_type: {Medical: 0, Annual: 1, Urgent: 3, "Birth Leave": 4} 
validate :check_leave, :if => "self.number_of_days.present?" 




protected 

def check_leave 
    if self.leave_type = 0 
    if (self.number_of_days + LeaveAllocation.last.medical_leave_counter) > LeaveAllocation.last.medical_leave 
     self.errors.add(:number_of_days, "Days exceeded the limit") 
    end 
    end 
    if self.leave_type = 1 
    if (self.number_of_days + LeaveAllocation.last.annual_leave_counter) > LeaveAllocation.last.annual_leave 
     self.errors.add(:number_of_days, "Days exceeded the limit") 
    end 
    end 

end 

end 

Wenn ich versuche, die Validierung zu führen, scheint es nur überprüft die ersten „0“ auch wenn ich die getroffene Auswahl zu ändern auf „1“. Jede Hilfe wäre willkommen! Danke

+0

Beim Erstellen und Aktualisieren, number_of_days ist der Feldname (Integer) –

+0

können Sie bitte komplette Model Class buchen? @Sean Lin –

+0

Aktualisiert mit komplettem Modell –

Antwort

1

wechseln zu == in wenn Bedingung.

self.leave_type == 0 and 
self.leave_type == 1 
+0

wird nach der Änderung von == nicht validiert. Wenn ich = verwende, wird nur die erste validiert ... –

+0

ändere diese Zeile wie folgt: validate: check_leave, wenn: -> {self.number_of_days.present? } ' –

+0

Es ist immer noch gleich .. nur validiere den ersten Schritt für" 0 " –

Verwandte Themen