如何编写此范围以在嵌套模型上搜索属性? (再次)

时间:2011-04-16 11:15:12

标签: ruby-on-rails scope

行,

我今天早些时候提出了这个问题

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)

但是这不会返回任何结果(并且数据库中确实存在应该通过正确编写的搜索找到的患者)。任何帮助将不胜感激。

1 个答案:

答案 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/