0

我目前有一个将模型用户、经销商和角色链接在一起的设置。用户和经销商是多对多的,并且使用 Dealer_user 分配表按预期工作。

问题是我希望将角色分配给特定于经销商的用户(即,用户可以是一个经销商的销售经理和零件经理,而在另一个经销商中是销售经理和总监)。

为了做到这一点,我有一个角色模型(属于角色类型)。Role应该属于Dealer_user,而Dealer_user有很多Roles。

目的是我将能够做到

dealer.users.where(:id => user.id).first.roles
它只会返回特定于该经销商的角色。

我遇到的问题是,当我运行以下测试代码时:

dealer.users.where(:id => user.id).first.roles.create(:role_type_id => 1 + Random.rand(4))

我收到一个错误:

Cannot modify association 'User#roles' because the source reflection class 'Role' is associated to 'DealerUser' via :has_many.

谁能建议我对我的模型做错了什么(如下所示)?

注意: Role 与 Dealer_user 的 belongs_to 关系是多态的,因为它也可能属于 Sale_user 或其他需要与 Dealer 相同功能的关联表。

class Dealer < ActiveRecord::Base
  attr_accessible :name, :address_id
  has_many :dealer_users
  has_many :users, :through => :dealer_users
  has_many :roles, :through => :dealer_users
end

class User < ActiveRecord::Base
  attr_accessible :first_name, :last_name
  has_many :dealer_users
  has_many :dealers, :through => :dealer_users
  has_many :roles, :through => :dealer_users
end

class DealerUser < ActiveRecord::Base
  attr_accessible :dealer_id, :user_id
  belongs_to :dealer
  belongs_to :user
  has_many :roles, :as => :role_originator
end

class Role < ActiveRecord::Base
  attr_accessible :role_type_id
  belongs_to :role_type
  belongs_to :role_originator, :polymorphic => true
end

编辑:到目前为止没有运气 - 任何人都可以帮忙吗?

4

1 回答 1

1

我会使用has_many through与角色表的关联。去掉dealer_user表,在roles表中添加列dealer_iduser_id 然后你的模型看起来像这样:

class Dealer < ActiveRecord::Base
    has_many :users, :through => :roles
    has_many :roles
end

class User < ActiveRecord::Base
    has_many :dealers, :through => :roles
    has_many :roles
end

class Role < ActiveRecord::Base
    belongs_to :dealer
    belongs_to :user
end

这应该可以更轻松地执行您正在尝试的查询类型。导轨指南在这里有一个非常好的概述

于 2012-08-09T08:12:29.937 回答