Использование named_scopes в модели соединения has_many: through - PullRequest
3 голосов
/ 06 мая 2010

Я бью головой о стену о чем-то, что на поверхности должно быть очень простым. Допустим, у меня есть следующие упрощенные модели:

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 => ...

Итак, мой вопрос: есть ли способ использовать области с промежуточным именем при переходе непосредственно между моделями? Большое спасибо.

1 Ответ

0 голосов
/ 07 мая 2010

Я считаю, что вы можете использовать

User.find(1).memberships.active.collect(&:group)

и это вернет все группы, в которых этот пользователь активен.

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