2012-03-28 15 views
9

İki modellerine ayarladıysanız:Kontrol en az bir rekor verilen bir özellik gerçek

class Task < ActiveRecord::Base 
    has_many :subtasks 

end 

class Subtask < ActiveRecord::Base 
    belongs_to :task 

end 

alt görev alt görev tamamlandıktan true olarak ayarlanmış boolean nitelik.

Görevin en az bir tamamlanmış alt görevi olup olmadığını nasıl kontrol edebilirim? Bu Bunların her ikisi de bir veritabanı sorgusu ateş edeceği

task.subtasks.completed.exists? 

kısaltılmış olabilir alt görevler üzerinde completed kapsamını tanımlarsanız

cevap

19

mümkün olan en basit şey

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

olacağını, bu yüzden eğer zaten Alt görevler yüklenir (task.association(:subtasks).loaded?),

task.subtasks.any? {|subtask| subtask.completed?} 
gibi yakut nesnelerini işlemek için muhtemelen daha hızlı olacaktır
İlgili konular