【发布时间】:2011-12-07 09:19:29
【问题描述】:
坚持这个,如果你能看一下.. :)
我想要的是获得所有未完成的项目,包括某个用户的所有未完成的任务。
这是我目前的设置:
User (devise)
has_one :employee
Employee
belongs_to :user
has_and_belongs_to_many :tasks
has_and_belongs_to_many :unfinished_tasks, :conditions => { :tasks => { :completed_at => nil } }, :class_name => "Task"
has_many :unfinished_projects, :through => :unfinished_tasks, :source => :project, :uniq => true ( :include => :unfinished_tasks OR :include => :tasks ? )
Project
has_many :tasks
Task
belongs_to :project
has_and_belongs_to_many :employees
在我看来 (haml) 我想要这样的东西:
- for project in current_user.employee.unfinished_projects
= project.name
# THESE ARE NOT THE ONLY THE TASKS FOR THE CURRENT_USER
- for task in project.tasks ( OR project.unfinished_tasks ? )
= task.name
此设置适用于项目,只有未完成任务的项目。
但我不确定如何将未完成的任务包含在这些项目中。
任何人都知道执行此操作的最佳方法,如果可能的话,我希望对所有这些都进行一次查询。
编辑: 棘手的部分是任务必须针对 current_user。 项目已完美加载。
但是当它加载任务时:
- for task in project.tasks.unfinished
这样做:
Task Load (1.3ms) SELECT `tasks`.* FROM `tasks` WHERE `tasks`.`project_id` IN (12, 7, 13, 15, 14, 10, 16, 17, 9, 2, 3)
Task Load (0.4ms) SELECT `tasks`.* FROM `tasks` WHERE `tasks`.`project_id` = 12 AND `tasks`.`completed_at` IS NULL
Task Load (0.3ms) SELECT `tasks`.* FROM `tasks` WHERE `tasks`.`project_id` = 7 AND `tasks`.`completed_at` IS NULL
Task Load (0.6ms) SELECT `tasks`.* FROM `tasks` WHERE `tasks`.`project_id` = 13 AND `tasks`.`completed_at` IS NULL
etc.
它应该做的是得到员工的任务:
Employee
Projects
Tasks
这应该是项目查询中内部连接的任务。
【问题讨论】:
-
您的要求并不完全清楚。您的意思是您希望“unfinished_projects”成为未完成任务的项目列表吗?您的意思是要使用“incomplete_tasks”来表示属于该项目的尚未完成的任务(并且看不到已完成的任务)?
-
一个未完成的项目是一个有许多未完成任务的项目。我想要某个员工未完成任务的所有未完成项目。理想的情况是包含所有这些记录的单个查询。
-
最大的问题是,在我拿到项目并遍历项目的任务后,它们不再与该特定员工相关。
标签: sql ruby-on-rails ruby ruby-on-rails-3 associations