检查是否至少有一条记录的给定属性设置为true

时间:2012-03-28 18:22:02

标签: ruby-on-rails activerecord has-many belongs-to

两种型号:

class Task < ActiveRecord::Base
  has_many :subtasks

end

class Subtask < ActiveRecord::Base
  belongs_to :task

end

子任务具有布尔属性,如果子任务完成,则设置为true。

如何检查任务是否至少有一个已完成的子任务?

1 个答案:

答案 0 :(得分:19)

最简单的可能是

task.subtasks.where(:completed => true).exists?

如果您在子任务上定义completed范围,则可以缩短为

task.subtasks.completed.exists?

这两个都会触发数据库查询,所以如果你已经加载了子任务(task.association(:subtasks).loaded?),那么通过某些方式操作ruby对象可能会更快

task.subtasks.any? {|subtask| subtask.completed?}