在has_many:through的连接模型上使用named_scopes

时间:2010-05-06 19:45:59

标签: ruby-on-rails join named-scope has-many-through

我一直在墙上敲打着表面应该非常简单的东西。假设我有以下简化模型:

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)这样的事情,它会返回会员资格和群组的集合。我不希望这样。

我知道我可以在User模型上添加另一个has_many,条件是复制成员模型上的:active named_scope,但这很糟糕。

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

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

1 个答案:

答案 0 :(得分:0)

我相信你可以使用

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

这将返回此用户处于活动状态的所有组。