1

我有 3 个模型,用户、经销商和角色,如下所示:

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仅返回与所选经销商和用户关联的角色,而不是用户的所有角色?

4

1 回答 1

0

您的查询的问题是您要找到经销商的第一个用户,然后询问该用户的角色,这与经销商无关。

如果您已经知道您想要哪个经销商,并且您想要该经销商的第一个用户,那么您可以执行类似的操作

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

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

于 2012-08-10T13:00:39.550 回答