Rails 关联三个模型
Rails associtating three models
我的 rails 应用程序中有以下模型
class User < ApplicationRecord
end
class Group < ApplicationRecord
end
class Role < ApplicationRecord
end
每个 Group
has_many User
有不同的 Role
。例如 Group-1
有 User - A
和 Role - Admin
和 Group-1
有 User - B
有 Role - Member
和 Group-2
有 User - A
有Role - Member
。同样,每个 Group
有多个 Users
,每个 User
有多个 Role
.
请指导我应该使用什么样的关联?
假设一个用户只属于一个组,只有一个角色。
模型中的关联:
class Group < ApplicationRecord
has_many :users
end
class User < ApplicationRecord
belongs_to :group
belongs_to :role
end
class Role < ApplicationRecord
has_many :users
end
应添加到模型中的列:
用户:
group_id:integer:index
role_id:integer:index
编辑 1:
正在根据评论更新关联。
class Group < ApplicationRecord
has_many :users
has_many :roles
end
class User < ApplicationRecord
belongs_to :group
end
class Role < ApplicationRecord
belongs_to :group
end
应添加到模型中的列:
用户:
group_id:integer:index
角色:
group_id:integer:index
要查找用户的组和角色,您可以使用:
user = User.last
user.group # Returns group of the user
user.group.roles # Returns roles of the user
Incase,如果用户属于多个组并且角色属于多个用户,我希望以下关联能正常工作...
class Group < ApplicationRecord
has_many :group_users
has_many :users, through: :group_users
has_many :group_user_roles
has_many :roles, through: :group_user_roles
end
class User < ApplicationRecord
has_many :group_users
has_many :groups, through: :group_users
has_many :group_user_roles
has_many :roles, through: :group_user_roles
end
class GroupUser < ApplicationRecord
belongs_to :group
belongs_to :user
end
class Role < ApplicationRecord
end
class GroupUserRole < ApplicationRecord
belongs_to :user
belongs_to :group
belongs_to :role
end
您需要再创建一个 table(GroupUserRole) 来将多个用户与多个群组关联起来,以实现多个角色。
您还可以创建一个 Tri-related table 为用户的每个成员都有一个记录并保存该用户的角色。
class Trirelation
belongs_to :group
belongs_to :user
belongs_to :role
end
class User
has_many :trirelations
has_many :groups, through: :trirelations
end
class Group
has_many :trirelations
has_many :users, through: :trirelations
end
class Role
has_many :trirelations
end
如果您需要查询给定用户是否是组的管理员,
@role = Trirelation.find_by(user_id: 1, group_id: 21).role.name
我的 rails 应用程序中有以下模型
class User < ApplicationRecord
end
class Group < ApplicationRecord
end
class Role < ApplicationRecord
end
每个 Group
has_many User
有不同的 Role
。例如 Group-1
有 User - A
和 Role - Admin
和 Group-1
有 User - B
有 Role - Member
和 Group-2
有 User - A
有Role - Member
。同样,每个 Group
有多个 Users
,每个 User
有多个 Role
.
请指导我应该使用什么样的关联?
假设一个用户只属于一个组,只有一个角色。
模型中的关联:
class Group < ApplicationRecord
has_many :users
end
class User < ApplicationRecord
belongs_to :group
belongs_to :role
end
class Role < ApplicationRecord
has_many :users
end
应添加到模型中的列:
用户:
group_id:integer:index
role_id:integer:index
编辑 1:
正在根据评论更新关联。
class Group < ApplicationRecord
has_many :users
has_many :roles
end
class User < ApplicationRecord
belongs_to :group
end
class Role < ApplicationRecord
belongs_to :group
end
应添加到模型中的列:
用户:
group_id:integer:index
角色:
group_id:integer:index
要查找用户的组和角色,您可以使用:
user = User.last
user.group # Returns group of the user
user.group.roles # Returns roles of the user
Incase,如果用户属于多个组并且角色属于多个用户,我希望以下关联能正常工作...
class Group < ApplicationRecord
has_many :group_users
has_many :users, through: :group_users
has_many :group_user_roles
has_many :roles, through: :group_user_roles
end
class User < ApplicationRecord
has_many :group_users
has_many :groups, through: :group_users
has_many :group_user_roles
has_many :roles, through: :group_user_roles
end
class GroupUser < ApplicationRecord
belongs_to :group
belongs_to :user
end
class Role < ApplicationRecord
end
class GroupUserRole < ApplicationRecord
belongs_to :user
belongs_to :group
belongs_to :role
end
您需要再创建一个 table(GroupUserRole) 来将多个用户与多个群组关联起来,以实现多个角色。
您还可以创建一个 Tri-related table 为用户的每个成员都有一个记录并保存该用户的角色。
class Trirelation
belongs_to :group
belongs_to :user
belongs_to :role
end
class User
has_many :trirelations
has_many :groups, through: :trirelations
end
class Group
has_many :trirelations
has_many :users, through: :trirelations
end
class Role
has_many :trirelations
end
如果您需要查询给定用户是否是组的管理员,
@role = Trirelation.find_by(user_id: 1, group_id: 21).role.name