3

我一直在用头撞墙,表面上应该很简单。假设我有以下简化模型:

用户.rb

has_many :memberships  
has_many :groups, :through => :memberships

会员资格.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]]}

组.rb

has_many :memberships  
has_many :users, :through => :memberships

很简单,对吧?所以我想要做的是使用连接模型上现有的命名范围来获取用户活动的所有组的集合。类似于 User.find(1).groups.active 的东西。显然这是行不通的。

但就目前而言,我需要做一些类似User.find(1).membrships.active.all(:include => :group)返回成员资格和组的集合的事情。我不想要那个。

我知道我可以在 User 模型上添加另一个 has_many ,其条件与 Membership 模型上的 :active named_scope 重复,但这很糟糕。

has_many :active_groups, :through => :memberships, :source => :group, :conditions => ...

所以我的问题是:有没有办法在模型之间直接遍历时使用中间命名范围?非常感谢。

4

1 回答 1

0

我相信你可以使用

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

这将返回该用户活跃的所有组。

于 2010-05-06T20:25:31.283 回答