Как мне написать эту область для поиска атрибутов во вложенной модели?(снова) - PullRequest
0 голосов
/ 16 апреля 2011

OK

Я задал этот вопрос сегодня утром

Как написать область для поиска атрибутов во вложенной модели?

и получил отличный ответ на поиск атрибутов во вложенных моделях в Rails.

В предыдущем вопросе была написана область, в которой были найдены все пациенты, у которых было госпитализация с временем выписки ноль (спасибо tjwallace).

class Patient < ActiveRecord::Base
  has_many :admissions

  scope :admitted, includes(:admissions).where('admissions.discharge_time' => nil)
end

То, что я сейчас пытаюсь сделать, - это написать область действия: discharged, которая выполнит поиск, который вернет всех пациентов, у которых есть хотя бы одно поступление, с Discharge_time, которое не равно нулю. Я пробовал следующее:

scope :discharged, includes(:admissions).where('admissions.discharge_time <> ?', nil)

но это не возвращает результатов (и в базе данных определенно есть пациенты, которые должны быть найдены с помощью правильно написанного поиска). Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 16 апреля 2011

Это потому, что в 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...