我正在努力寻找关联三种模型的最简单的解决方案:
用户和组织是HABTM关联 - 一个用户可以拥有多个组织,反之亦然。
一个用户也可以拥有多个角色,但每个组织只能拥有一个角色。
现在我的模型中有这个:
user.rb
class User < ActiveRecord::Base
has_many :roles, through: :organizations
has_and_belongs_to_many :organizations, :join_table => :organizations_users
end
organization.rb
class Organization < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => :organizations_users
has_many :roles
end
role.rb
class Role < ActiveRecord::Base
has_many :users, through: :organizations
belongs_to :organizations
end
这有意义吗?
答案 0 :(得分:1)
以下是我的:
has_and_belongs_to_many
并且给定了Rails的默认值,您的join_table
规范是多余的has_many :roles, through: :organizations
表中同时包含role
和user
字段时,您的organizations
才有效,因为Rails会期望执行SQL {{1}该表寻找那些字段。由于您希望用户每个组织最多只能有一个角色,因此我认为最简单的方法是将select
字段添加到role
模型中,如下所示:
<强> user.rb 强>
organizations_users
<强> organization.rb 强>
class User < ActiveRecord::Base
has_many :roles, through: :organizations_users
has_many :organizations, :through => :organizations_users
has_many :organizations_users
end
<强> organization_user.rb 强>
class Organization < ActiveRecord::Base
has_many :users, :through => :organizations_users
has_many :roles, :through => :organizations_users
has_many :organizations_users
end
<强> role.rb 强>
class OrganizationUser < ActiveRecord::Base
belongs_to :user
belongs_to :organization
belongs_to :role
end
以上假设您有理由希望class Role < ActiveRecord::Base
end
继续成为Role
而不是ActiveModel
表中的字符串字段。