根据您关于此主题的其他 SO 问题,我建议您在数据库中有一个字段,允许您从该schedule_users
方法中排除用户。
validates_presence_of :name, :start, :frequency, :project
def next_occurrence
ice_cube_schedule.next_occurrence.start_time
end
def jobs
Delayed::Job.where('handler LIKE ?', "%Schedule/#{id}\%")
end
def on_call_user
# This should not include any users that are unavailable
schedule_users.max_by(&:priority).user if users.present?
end
def priority(user)
# This should not include any users that are unavailable
schedule_users.where(user: user).first.try(:priority)
end
...
end
因此,在您的User
模型中,您可以有一个scope
阻止unavailable
用户被选中的:
class User
# we will need a boolean database field called "unavailable"
scope :available, -> { where(unavailable: false) }
...
end
然后您可以调用User.all.available
(或@users.available
) 以仅获取“可用”用户。
互相掩护怎么样?
也许我过度简化了这一点,你的例子是一个相当复杂的逻辑:
John 在前 2 天在 PTO 上,而他被分配到任务中,而 Avit 在这 2 天中接管,当 John 在第 3 天回来时,他收回了任务分配
如果 John 已经在 PTO 上,为什么要为他分配任务?为什么它不默认为 Avit?这就是我上面所说的。
如果您想要一种手动让约翰在第 3 天接管任务的方法,您只需要destroy
或edit
现有的活动ice_cube
时间表,对吗?