Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if at least one record have a given attribute set to true

Two models:

class Task < ActiveRecord::Base
  has_many :subtasks

end

class Subtask < ActiveRecord::Base
  belongs_to :task

end

Subtask have boolean attribute that set to true if subtask is complete.

How can i check if a task has at least one completed subtask?

like image 683
Edward Avatar asked Mar 28 '12 18:03

Edward


1 Answers

The simplest possible thing would be

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

If you define a completed scope on subtasks this could be shortened to

task.subtasks.completed.exists?

Both of these will fire a database query, so if you already have the subtasks loaded (task.association(:subtasks).loaded?) it will probably be quicker to manipulate the ruby objects via somethig like

task.subtasks.any? {|subtask| subtask.completed?}
like image 163
Frederick Cheung Avatar answered Oct 19 '22 09:10

Frederick Cheung