两种型号:
class Task < ActiveRecord::Base
has_many :subtasks
end
class Subtask < ActiveRecord::Base
belongs_to :task
end
子任务具有布尔属性,如果子任务完成,则设置为true。
如何检查任务是否至少有一个已完成的子任务?
答案 0 :(得分:19)
最简单的可能是
task.subtasks.where(:completed => true).exists?
如果您在子任务上定义completed
范围,则可以缩短为
task.subtasks.completed.exists?
这两个都会触发数据库查询,所以如果你已经加载了子任务(task.association(:subtasks).loaded?
),那么通过某些方式操作ruby对象可能会更快
task.subtasks.any? {|subtask| subtask.completed?}