Ruby on Rails关系

时间:2014-05-06 18:16:02

标签: ruby-on-rails ruby

我目前正在建立一个需要同时创建用户和组织的注册系统。组织需要拥有所有者或系统管理员。我相信我的第二个选项是最好的,因为我可以创建组织,系统管理员角色和用户而没有任何循环数据库问题。我对第一个选项的担心是组织由用户拥有,该用户也属于该组织。

首先 -

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是否有益?

1 个答案:

答案 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