按协会查找记录

时间:2011-12-21 21:13:43

标签: ruby-on-rails

我的第一个问题是,我不确定这是否可行。但是因为我已经在这里得到了很多帮助,所以我至少会尝试自己提问。

我在这里有一个模型'论文',它通过关系模型具有很多'任务',并且还有_many'checked_tasks'。现在我想只有那些任务数量与check_tasks数量相关的论点。

class Thesis < ActiveRecord::Base
  has_many :tasks, :through => :relations
  has_many :checkedtasks
end

class Task < ActiveRecord::Base
  belongs_to :relation
end

class CheckedTask < ActiveRecord::Base
  belongs_to :thesis
end

我的第一个想法就是去Thesis.where( self .tasks.count == self .checked_tasks.count) - 但我不知道使用什么而不是 self 来使其工作。

在那之后,我试图用白色范围来做,但这仍然让我遇到同样的问题。

毕竟,我不确定是否有“铁路方式”来做到这一点 - 如果是这样,我会非常感谢你的帮助

2 个答案:

答案 0 :(得分:1)

CheckedTask只是一个被标记为完成的任务?如果是这样,我不知道为什么你需要一个单独的类。任务是一项任务,它是完成的还是不完整的。在

中跟踪此状态

您应该可以使用scope模型上的Task执行此操作,例如:

class Task < ActiveRecord::Base
  scope :checked, lambda { where(:complete => true) }

  ...
end

并确保boolean表上的tasks列名为complete - 如果任务尚未完成,则应为false,{{1}如果任务完成。

获取true的已检查任务列表:

Thesis

答案 1 :(得分:1)

你可以做到

Thesis.joins(:checked_tasks, :tasks).group("thesis.id").select("thesis.*, count(distinct tasks.id) as task_count, count(distinct checked_tasks.id) as checked_count").having("checked_count = task_count")

但这是一个运行查询的猪。你应该按照一些评论者提出的方法重新设计数据模型,使用论文和任务之间的连接模型来存储论文任务的检查性。