Rails - 限制has_many关联的结果

时间:2012-08-10 10:58:50

标签: ruby-on-rails ruby-on-rails-3 activerecord

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

1 个答案:

答案 0 :(得分:0)

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

如果你已经知道你想要什么经销商,并且你想要该经销商的第一个用户,那么你可以做类似的事情

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

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