Find z WHERE .. IN oraz IS NOT NULL

Mam model User połączony relacją wiele do wiele z Unit za pośrednictwem modelu Supervisor.
Chcę wyświetlić:

  1. użytkowników przypisanych do danego oddziału
  2. użytkowników przypisanych do danego oddziału i nie aktywnych
  3. użytkowników przypisanych do danego oddziału i aktywnych

Punkt 1. rozwiązuję poprzez wpisanie:conditions => {'supervisors.unit_id' => u_ids}
gdzie u_ids jest tablicą

Punkt 2. rozwiązuję podobnie, poprzez wpisanie:conditions => {'supervisors.unit_id' => u_ids, 'activated_at' => nil}
Z punktem 3. mam problem bo na różne sposoby próbuje wpisywać coś żeby wygenerować w zapytaniu IS NOT NULL, ale nie wiem co wpisać.

Zwykle dla condition używałem tablicy a nie hasha. Ale w tablicy nie da się (tzn. nie wiem jak) użyć konstrukcji WHERE … IN

Chyba tak

:conditions => ['supervisors.unit_id IN (?) AND users.activated_at IS NOT NULL', u_ids]

A nie można tak ? :

[code=ruby]class User
has_many :supervisors
named_scope :active, :conditions => “activated_at IS NOT NULL”
named_scope :inactive, :conditions => “activated_at IS NULL”
end

class Supervisor
belongs_to :user
belongs_to :unit
end

class Unit
has_many :supervisors
has_many :users, :through => :supervisors
end

#1

unit.users

#2

unit.users.inactive

#3

unit.users.active[/code]