私のRails 2.2.2アプリでは、次のように結合された2つのテーブル/モデルがあります:
School
has_many :licenses, :as => :licensable
License
belongs_to :licensable, :polymorphic => true
#important fields for this question:
#start_date: datetime
#end_date: datetime
現在のライセンスを持つすべての学校を検索したい場合、それは非常に簡単です:
licensed_schools = School.find(:all, :include => [:licenses], :conditions => ["licenses.start_date < ? and licenses.end_date > ?", Time.now, Time.now])
これにより、結合テーブルに有効なライセンスがあるすべての学校が見つかります。ここまでは順調ですね。
ただし、有効なライセンスを持っていないすべての学校を見つけたい場合は、(これまでのところ)より困難です: たとえば、
unlicensed_schools = = School.find(:all, :include => [:licenses], :conditions => ["licenses.id is null or licenses.start_date > ? or licenses.end_date < ?", Time.now, Time.now]
次に、a)ライセンスをまったく持っていない(罰金)、またはb)古い(無効な)ライセンスと新しい(有効な)ライセンスを持つ学校を含む、少なくとも1つの無効なライセンスがある学校を取り戻します。
言い換えれば、ライセンスを持っていないか、1 つ以上の無効なライセンスがある (有効なライセンスを持っているかどうかに関係なく) すべての学校を返します。有効なライセンスが 0 のすべての学校を返す必要があります。
これを行う方法がよくわかりません。誰でも助けてくれますか?