0

私は現在、モデル User、Dealer、および Role をリンクするセットアップを行っています。User と Dealer は多対多で、Dealer_user 割り当てテーブルで期待どおりに機能しています。

問題は、ディーラーに固有の役割もユーザーに割り当てたいということです (つまり、ユーザーは、あるディーラーではセールス マネージャーとパーツ マネージャーであり、別のディーラーではセールス マネージャーとディレクターである可能性があります)。

これを行うために、Role モデル (Role_type に属する) があります。Role は Dealer_user に属する必要があり、Dealer_user には多くの Role があります。

できるようになるのが目的です

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ロール テーブルとの関連付けを使用します。deal_user テーブルを取り除き、ロール テーブルに列を追加すると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

これにより、試しているタイプのクエリを実行しやすくなります。Railsガイドには、ここに非常に優れた概要があります

于 2012-08-09T08:12:29.937 に答える