我无法绕过这头。
我有一个模型(任务),它具有以下属性:: 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。如果当天(上图),前一天或第二天没有任何任务,我将返回零。
前一天和下一天很简单,因为我将从前一天(如果存在)或第二天的第一个任务获得最后一个任务。如果当天有几个任务,我希望能够将任务分类,以便轻松找到上一个和下一个任务,即
@self_id = @tasks_on_same_day.index(self)
并将该索引用于prev或next任务的update_attributes。问题是,我不认为新创建的任务或更新的任务(即,我更新begin_time)将在before_save回调中可用。
我可以创建一个类方法,将self排序为当前任务列表。
我不是在寻找有人为我编码,但我对我应采取的方法感到困惑。
感谢。
答案 0 :(得分:0)
我的回答是:我是新手。
经过一段时间的沮丧之后,我开始看RailsCasts,从昨晚开始我离开的地方。我突然意识到(观看有关ActiveRecord查询的视频)我是个白痴。
我还没有尝试过,但我可以查询类似......
的内容@previous = Task.for_day(self.day).for_room(self.room).with_gear(self.gear).where('begin_time < ?' self.begin_time).last
@next = Task.for_day(self.day).for_room(self.room).with_gear(self.gear).where('begin_time > ?' self.begin_time).first
这简直太容易了。为了使这个问题有用,像这样的长查询字符串的性能影响是什么?