2012-08-10 38 views
1

我有3種型號,用戶,經銷商和角色,看起來如下:導軌 - 中的has_many協會限制結果

class User < ActiveRecord::Base 
    has_many :roles 
    has_many :sales, :through => :roles 
    has_many :appraisals, :through => :roles 
    has_many :dealers, :through => :roles 
end 

class Dealer < ActiveRecord::Base 
    has_many :roles, :as => :role_originator 
    has_many :users, :through => :roles 
end 

class Sale < ActiveRecord::Base 
    has_many :roles, :as => :role_originator 
    has_many :users, :through => :roles 
end 

class Role < ActiveRecord::Base 
    belongs_to :role_type 
    belongs_to :user 
    belongs_to :role_originator, :polymorphic => true 
end 

的關聯是否按預期工作 - 例如,我可以做dealer.users並得到所有在該經銷商有角色的用戶。

我遇到的問題是我希望能夠做到dealer.users.first.roles並只返回與該經銷商相關聯的角色,但目前它返回與用戶相關聯的所有角色,無論是否他們指的是另一個經銷商。

如何修改我的模型以允許dealer.users.first.roles僅返回與所選經銷商和用戶關聯的角色,而不是用戶的所有角色?

回答

0

您的查詢的問題在於,您正在查找經銷商的第一位用戶,然後詢問該用戶的角色,這與經銷商無關。

如果你已經知道你想要什麼的經銷商,你想從經銷商第一個用戶,那麼你可以這樣做

@dealer = dealer 
@user = @dealer.users.first 
@roles = Role.where("user_id = ? AND dealer_id = ?", @user.id, @dealer.id) 

這應該只返回由用戶和經銷商共同的角色。