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 に答える