行,
我今天早些时候提出了这个问题
How do I write a scope to search for attributes on a nested model?
并在Rails中搜索嵌套模型中的属性得到了很好的答案。
在上一个问题中,写了一个范围,发现所有患者入院时的出院时间为零(谢谢tjwallace)。
class Patient < ActiveRecord::Base
has_many :admissions
scope :admitted, includes(:admissions).where('admissions.discharge_time' => nil)
end
我现在要做的是编写一个名为:discharge的范围,这将进行搜索,返回所有至少有一次入院且放行时间不为零的患者。我尝试了以下内容;
scope :discharged, includes(:admissions).where('admissions.discharge_time <> ?', nil)
但是这不会返回任何结果(并且数据库中确实存在应该通过正确编写的搜索找到的患者)。任何帮助将不胜感激。
答案 0 :(得分:1)
这是因为在SQL中你无法真正地将任何东西与NULL进行比较,你需要写这样的东西:
scope :discharged, includes(:admissions).where('admissions.discharge_time is not ?', nil)
以下是对此SQL行为的一个很好的解释: http://www.xaprb.com/blog/2006/05/18/why-null-never-compares-false-to-anything-in-sql/