Я бью головой о стену о чем-то, что на поверхности должно быть очень простым. Допустим, у меня есть следующие упрощенные модели:
user.rb
has_many :memberships
has_many :groups, :through => :memberships
membership.rb
belongs_to :group
belongs_to :user
STATUS_CODES = {:admin => 1, :member => 2, :invited => 3}
named_scope :active, :conditions => {:status => [[STATUS_CODES[:admin], STATUS_CODES[:member]]}
group.rb
has_many :memberships
has_many :users, :through => :memberships
Просто, верно? Поэтому я хочу получить коллекцию всех групп, в которых активен пользователь, используя существующую именованную область действия в модели соединения. Что-то вроде User.find (1) .groups.active. Очевидно, это не работает.
Но как бы то ни было, мне нужно сделать что-то вроде User.find(1).membrships.active.all(:include => :group)
, которое возвращает набор членов и групп. Я этого не хочу.
Я знаю, что могу добавить еще одно has_many в модель User с условиями, которые дублируют: active named_scope в модели Membership, но это брутто.
has_many :active_groups, :through => :memberships, :source => :group, :conditions => ...
Итак, мой вопрос: есть ли способ использовать области с промежуточным именем при переходе непосредственно между моделями? Большое спасибо.