我有两个名为Task和Employee的模型,它们具有多对多的关系。
--------------------------332c61f93bcd60b4
Content-Disposition: form-data; name="image"; filename="Cat.jpg"
Content-Type: image/jpeg
...
--------------------------332c61f93bcd60b4--
我想要一个这样的功能。员工在同一时间段内不能拥有多项任务。任务模型有start_date和duration字段,所以我需要字段来进行验证。
class Task < ApplicationRecord
has_and_belongs_to_many :employees
end
当我将新任务推送到员工的任务时,我想验证该员工是否已经与新员工发生冲突。我怎样才能做到这一点?
感谢。
答案 0 :(得分:0)
这是一种方式,不是最好的,但应该有效。在任务模型中,添加自定义验证以检查定义期间是否存在相同用户的其他任务。
class Task
validate :check_overlapping_tasks
def check_overlapping_tasks
end_date = start_date + duration
Task.where(user_id: user_id)
.where.not(id: id)
.where("(start_date BETWEEN ? AND ? ) OR (DATE_ADD(created_at, INTERVAL ? MINUTE) BETWEEN ? AND ?)", start_date, end_date, duration, start_date, end_date)
if overlapped_tasks.count > 0
errors.add(:base, 'User X has tasks in this period')
end
end
end