我有3个模型,User,Dealer和Role,如下所示:
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 :(得分:0)
您的查询问题在于您找到了经销商的第一个用户,然后询问该用户的角色,这与经销商无关。
如果你已经知道你想要什么经销商,并且你想要该经销商的第一个用户,那么你可以做类似的事情
@dealer = dealer
@user = @dealer.users.first
@roles = Role.where("user_id = ? AND dealer_id = ?", @user.id, @dealer.id)
这应仅返回该用户和该经销商共享的角色。