【发布时间】:2019-12-27 17:19:00
【问题描述】:
我在尝试隔离集合中的下一条/上一条记录时遇到问题。我是自学成才,对 Rails/编码比较陌生。
我有一个包含许多 GoalTasks 的 Goal 类。
GoalTask 有 taskduedate。我希望能够根据他们的 taskduedate 在goal_tasks 上循环下一个/上一个。
问题是任务截止日期正好是任务应该完成的时间,但它可以随时设置,可能不是按顺序排列,所以我不知道该按什么顺序排列正确循环。
我创建了一个目标任务数组来确定当前正在查看哪个任务(例如任务:3/20),所以我可以使用它转到下一个任务,我认为这里可能有一个解决方案,但它在视图/控制器中处理它感觉不对?
我已经从 stackoverflow 尝试了以下解决方案,但它无法处理我在同一天有多个目标任务到期的事实,如果我单击下一步,它只会转到目标任务到期的第二天。例如如果我今天有三项任务要完成,而我在第一项上并单击下一步,它将跳过今天的其他两项。
然后我尝试添加 >=(如下所示)以尝试拉下一个任务(包括同一天的任务),并且我尝试通过执行 where created_at is not the same as 来忽略当前任务当前的goal_task和where.not,但我还没有成功地让它按照我想要的方式循环,我想有一个更好的解决方案。
GoalTasksController:
def show
@all_tasks_ordered_due_date_desc = @goal.goal_tasks.order('taskduedate ASC', 'id ASC')
end
show.html.erb:
Task: <%= @all_tasks_ordered_due_date_desc.find_index(@goal_task) +1 %> /
<%= @goal.goal_tasks.count%>
目标任务.rb
scope :next_task, lambda {|taskduedate| where('taskduedate >= ?', taskduedate).order('id ASC') }
scope :last_task, lambda {|taskduedate| where('taskduedate <= ?', taskduedate).order('id DESC') }
def next_goal_task
goal.goal_tasks.next_task(self.taskduedate).first
end
谢谢
【问题讨论】:
标签: ruby-on-rails ruby postgresql activerecord