我很难解决这个问题。
我有一个模型(任务),它具有以下属性::day、:room、:begin_time、:end_time、:gear、:notes 和其他(不相关)。我在 Task 模型的迁移集中也有一个linked_id_task 属性。我有这些相关的范围(我将它们链接在一起):
scope :for_day, lambda { |day| where(day: day) }
scope :for_room, lambda { |room| where(room: room) }
scope :with_gear, lambda { |gear| where(gear: gear) }
@tasks_on_same_day = Task.for_day(self.day).for_room(self.room).with_gear(self.gear).all
@task_on_previous_day = Task.for_day(self.day.yesterday).for_room(self.room).with_gear(self.gear).last
@task_on_next_day = Task.for_day(self.day.tomorrow).for_room(self.room).with_gear(self.gear).first
无论我是创建新任务还是更新新任务,我都希望:
在私有实例方法 prev 中检查上一个和下一个任务(基于 :begin_time )?接下来呢?如果有以前的任务,我想更新它的 :notes 并将该任务添加到 :linked_task_id; 如果有下一个任务,我想用关于下一个任务的信息设置 self.notes 并将其添加到:linked_task_id。如果当天(上)、前一天或后天没有任何任务,我将返回 nil。
前天和后天很简单,因为我会得到前一天的最后一个任务(如果存在的话)或第二天的第一个任务。如果当天有多个任务,我希望能够将任务排序以轻松找到上一个和下一个任务,即
@self_id = @tasks_on_same_day.index(self)
并使用该索引来更新上一个或下一个任务的属性。问题是,我不认为新创建的任务或更新的任务(即,我更新了 begin_time)将在 before_save 回调中可用。
我可以创建一个类方法来将自己分类到当前任务列表中。
我不是在找人为我编写这个代码,但我对我应该采取的方法感到困惑。
谢谢。