在我的 Rails 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)至少有一个无效许可证,包括拥有旧(无效)许可证和新(有效)许可证的学校。
换句话说,它会退回所有没有许可证或拥有一个或多个无效许可证的学校(无论他们是否也有有效的许可证)。它应该返回所有拥有 0 个有效许可证的学校。
我无法完全弄清楚如何做到这一点。有什么帮助吗?