2010-05-06 27 views
3

我一直在表面上碰撞牆上的東西,應該很簡單。可以說,我有以下簡單的模式:在has_many的加入模型上使用named_scopes:通過

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,其條件是在成員模型上重複:active_scope,但這是嚴重的。

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

所以我的問題:是否有一種使用中間命名作用域時直接在模型之間遍歷?非常感謝。

回答

0

我相信你可以使用

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

,這將返回所有組該用戶是活躍的。

+0

可惜,這是行不通的。 – uberllama 2010-05-06 21:33:50

+0

類似的工作,但它的相當醜陋: user.memberships.active.all(:include =>:group).collect(&:group) – uberllama 2010-05-06 21:43:58

+0

當然...我的錯誤!你需要「收集」部分。它真的不是很漂亮...... – 2010-05-07 00:20:01

相關問題