2012-08-10 65 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) 

这应该只返回由用户和经销商共同的角色。