2016-05-02 10 views
-1

これは私のモデルである -Railsの4 - カスタム検証エラー

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 

私は検証を実行しようとすると、それだけで私は選択を「1」に変更しても小切手に「0」最初のものと思われます。どんな助けもありがとう!ありがとう

+0

作成時および更新時に、number_of_daysはフィールド名(整数) –

+0

完全モデルクラスを投稿できますか? @Sean Lin –

+0

完全なモデル –

答えて

1

if条件で==に変更してください。

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

==に変更した後は検証されません。 =を使用すると、最初のものだけが検証されますが、最初のものだけが有効になります... –

+0

このように 'validate:check_leave、if: - > {self.number_of_days.present? } ' –

+0

これはまだ同じです。「0」の最初の手順を検証するだけです。 –

関連する問題