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

Edw*_*ard 9 activerecord ruby-on-rails has-many belongs-to

两种型号:

class Task < ActiveRecord::Base
  has_many :subtasks

end

class Subtask < ActiveRecord::Base
  belongs_to :task

end
Run Code Online (Sandbox Code Playgroud)

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

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

Fre*_*ung 19

最简单的可能是

task.subtasks.where(:completed => true).exists?
Run Code Online (Sandbox Code Playgroud)

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

task.subtasks.completed.exists?
Run Code Online (Sandbox Code Playgroud)

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

task.subtasks.any? {|subtask| subtask.completed?}
Run Code Online (Sandbox Code Playgroud)