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,因此它是有意义的。一个用户可以有许多角色和角色组(角色组是一个坏名字,我会改变它,如果它让人困惑的话——它不是一个真正的角色组..它不仅仅是一个角色组)