【发布时间】:2016-05-16 06:54:27
【问题描述】:
我有以下休假模型。我要做的是根据休假类型、休假次数和休假分配来检查可用的休假数。似乎我的“check_leave”由于某种原因没有得到验证而没有任何错误。感谢任何帮助!
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 = self.number_of_days + LeaveAllocation.last.medical_leave_counter ) > LeaveAllocation.last.medical_leave
self.errors.add(:number_of_days, "Days exceeded the limit")
end
elsif self.leave_type == 1
if ( self.number_of_days = 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
【问题讨论】:
-
“不工作”是什么意思?错误?结果不正确?请给出实现的输出,然后是预期的输出,显示如何在它工作时识别它。
-
它根本不验证 check_leave。没有错误
-
你是说
validate没有调用你的check_leave方法吗?或者您是说check_leave中存在逻辑问题导致验证失败?或者您是说check_leave中存在逻辑问题,导致它在不应该通过验证的情况下通过验证?或者是否还有其他我无法猜测的问题? -
它调用 check_leave 但它在不应该通过验证时通过了验证。如果您能帮我检查我的条件语句并查看是否有任何错误,那就太好了。谢谢
-
我看到 2 件事我质疑:1) self.errors.add 的使用是不合时宜的。它应该是errors.add,如果你在某个地方有冲突,那是需要认真考虑的事情。 2)
self.number_of_days = self.number_of_days + LeaveAllocation.fieldname似乎没有按照你的想法去做。每次验证时,它都会通过 leave_counter 递增 self.number_of_days。验证中不会出现这样的副作用。
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord