Проверьте, имеет ли хотя бы одна запись заданный атрибут для true - PullRequest
9 голосов
/ 28 марта 2012

Две модели:

class Task < ActiveRecord::Base
  has_many :subtasks

end

class Subtask < ActiveRecord::Base
  belongs_to :task

end

Подзадача имеет логический атрибут, который устанавливается в значение true, если подзадача завершена.

Как я могу проверить, есть ли у задачи хотя бы одна выполненная подзадача?

1 Ответ

19 голосов
/ 28 марта 2012

Самая простая вещь будет

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

Если вы задаете область действия completed для подзадач, ее можно сократить до

task.subtasks.completed.exists?

Оба они будут запускать запрос к базе данных, поэтому, если у вас уже есть загруженные подзадачи (task.association(:subtasks).loaded?), вероятно, будет быстрее манипулировать объектами ruby ​​через что-то вроде

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