私は現在、モデル 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
編集:これまでのところ運が悪い - 誰か助けてくれる?