0

我真的需要签if shift入我的自定义验证器吗?validates :shift, presence: true

我可以以某种方式重构它吗?

class ShiftLog < ActiveRecord::Base
  belongs_to :shift
  validates :shift, presence: true
  validate  :check_limit

  def check_limit
    if shift
      shift_logs = ShiftLog.by_shift(shift)
      if shift_logs.count >= self.shift.limit
        errors.add(:shift_id, "Exceeded limit")
      end
    end
  end
end
4

2 回答 2

0

是的,您无需再次检查。它看起来不错,除了你可以写一个衬里条件:

 def check_limit
   shift_logs = ShiftLog.by_shift(shift)
   errors.add(:shift_id, "Exceeded limit")  if shift_logs.count >= self.shift.limit
 end
于 2013-09-17T13:50:11.847 回答
0

您需要它,以便在未分配班次时它不会崩溃。您有另一个验证的事实并不会改变它可能会失败的事实。

于 2013-09-17T13:50:31.153 回答