【问题标题】:Check if at least one record have a given attribute set to true检查是否至少一条记录的给定属性设置为 true
【发布时间】:2012-03-28 18:22:02
【问题描述】:
两种型号:
class Task < ActiveRecord::Base
has_many :subtasks
end
class Subtask < ActiveRecord::Base
belongs_to :task
end
子任务有布尔属性,如果子任务完成则设置为真。
我如何检查一个任务是否至少有一个已完成的子任务?
【问题讨论】:
标签:
ruby-on-rails
activerecord
has-many
belongs-to
【解决方案1】:
最简单的可能是
task.subtasks.where(:completed => true).exists?
如果您在子任务上定义 completed 范围,则可以缩短为
task.subtasks.completed.exists?
这两个都会触发数据库查询,所以如果您已经加载了子任务 (task.association(:subtasks).loaded?),通过类似的东西来操作 ruby 对象可能会更快
task.subtasks.any? {|subtask| subtask.completed?}