我的第一个问题是,我不确定这是否可行。但是因为我已经在这里得到了很多帮助,所以我至少会尝试自己提问。
我在这里有一个模型'论文',它通过关系模型具有很多'任务',并且还有_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 来使其工作。
在那之后,我试图用白色范围来做,但这仍然让我遇到同样的问题。
毕竟,我不确定是否有“铁路方式”来做到这一点 - 如果是这样,我会非常感谢你的帮助
答案 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")
但这是一个运行查询的猪。你应该按照一些评论者提出的方法重新设计数据模型,使用论文和任务之间的连接模型来存储论文任务的检查性。