Ruby on rails 有很多人通过帮助,我做错了什么?
我的模型是这样的:Ruby on rails 有很多人通过帮助,我做错了什么?,ruby-on-rails,Ruby On Rails,我的模型是这样的: User has_and_belongs_to_many :Roles Role has_and_belongs_to_many :Users 表: roles_users user_id role_id roleGroups id role_id some_column 现在我想在用户模型上创建另一个关联,它将是用户所属的所有角色组的集合 即,如果用户在id为1和2的角色中,则获取角色id=1和2的所有角色组。 我想我需要使
User
has_and_belongs_to_many :Roles
Role
has_and_belongs_to_many :Users
表:
roles_users
user_id
role_id
roleGroups
id
role_id
some_column
现在我想在用户模型上创建另一个关联,它将是用户所属的所有角色组的集合
即,如果用户在id为1和2的角色中,则获取角色id=1和2的所有角色组。
我想我需要使用through,因为它基于用户的角色关联,对吗
我试过:
User
has_many :RoleGroups, :through => :Roles
Role
has_many :RoleGroups, :through => :User
但我得到一个错误,说:
ActiveRecord::HasManyThroughSourceAssociationMacroError: Invalid source reflection macro :has_many :through for has_many :RoleGroups, :through => :Roles. Use :source to specify the source reflection.
更新
好的,我的模型现在看起来像这样:
User
habtm :Roles
has_many :RoleGroups, :through => :Roles
Role
habtm :Users
has_many :RoleGroups
RoleGroup
belongs_to :Role
mysql表:
roles_users
user_id
role_id
role_groups
id
role_id
col3
col4
..
如果我这样做:
u = User.find(1)
u.Roles (works fine)
u.RoleGroups #see error
错误消息:
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'roles.user_id' in 'where clause': SELECT `role_groups`.* FROM `role_groups` INNER JOIN `roles` ON `role_groups`.role_id = `roles`.id WHERE ((`roles`.user_id = 1))
你在寻找这种联系。你不能按你的想法去做。我不知道你为什么要把你的联系资本化,但还有一些事情是错误的 首先,
RoleGroups
挂起了角色
(via有很多
,但在一秒钟内会有更多),这意味着用户
和RoleGroup
之间没有直接联系
其次,从您更新的说明中可以看出,每个角色组可以有多个角色,这是正常的,但在您的代码中,角色有多个:角色组,这意味着每个角色可以有多个角色组。这是违反直觉的命名,但可能是有意的。我将假设您的角色组包含多个角色,而不是相反
第三,不能将HABTM用作:通过模型。HABTM只使用数据库中的一个表,而不是Rails模型,因此您的roles\u users
表中的信息不能直接使用<代码>有许多:foos:through=>:Bar
需要实际的Bar
模型
# Models
User
habtm :roles
Role
habtm :users
belongs_to :role_group # add role.role_group_id attribute
RoleGroup
has_many :roles # remove role_groups.role_id attribute
# Console
u = User.find(1) # get user
r = u.roles # get user roles
u.roles.collect { |role| role.role_group.name }
# ["Administrative","Editorial","User"]
在用户+角色组和角色+角色组之间?但是联接表RoleGroups没有userid…对于具有的联接表,您不需要模型,因为具有\u并且\u属于\u many
。看看链接的导轨,它有图表显示了桌子的布局。嗨,你的右边那是一种类型,我把它修好了。但这仍然不起作用:user.RoleGroups,我将在我的问题中输入错误。角色是否可以属于多个角色组?一个用户是否有多个角色或角色组(IMO,不应该两者都有)?是的,一个角色可以属于一个或多个角色组,角色组上有其他FK,因此它是有意义的。一个用户可以有许多角色和角色组(角色组是一个坏名字,我会改变它,如果它让人困惑的话——它不是一个真正的角色组..它不仅仅是一个角色组)