我目前正在建立一个需要同时创建用户和组织的注册系统。组织需要拥有所有者或系统管理员。我相信我的第二个选项是最好的,因为我可以创建组织,系统管理员角色和用户而没有任何循环数据库问题。我对第一个选项的担心是组织由用户拥有,该用户也属于该组织。
首先 -
Class User
belongs_to :organization
belongs_to :role
has_one :organization_as_owner, class_name: "Organization", foreign_key: "owner_id"
Class Organization
belongs_to :owner, class_name: "User"
has_many :users
has_many :roles
Class Role
belongs_to :organization
has_many :users
第二 -
Class User
belongs_to :organization
belongs_to :role
Class Organization
has_many :users
has_many :roles
Class Role
belongs_to: organization
has_many :users
使用第二个选项,我会使用Sys Admin的权限表,并允许他们添加新的角色等。您更喜欢哪种设置?为什么?在任一选项上使用has_many是否有益?
答案 0 :(得分:1)
我可能会设置这样的关系:
Class User
belongs_to :organization
belongs_to :role
Class Organization
has_many :users
has_many :roles
Class Role
has_many :users
belongs_to: organization
这假设所有用户只有一个角色。这样,您可以进行以下调用:
user.role
user.organization
organization.users
organization.roles
(这只是集体列出组织内用户的所有角色,如有必要,可以随时运行uniq!
role.user
role.organization
但是,我认为你也应该看看优秀的rolify gem,它可能会帮助你开箱即用:https://github.com/EppO/rolify