0

我有两个模型 - UsersRoles。它们的关联如下:

用户.rb

...
has_and_belongs_to_many :roles
...

角色.rb

...
has_and_belongs_to_many :users
...

因此,一个用户可以有多个角色,一个角色可以与多个用户相关联。

为了设置角色的默认值(因为每个用户都应该至少创建一个角色),我在我的seed.rb文件中添加了以下代码并运行db:seed命令:

roles = [
    Admin: 'test',
    Student: 'test'
]

roles.each do |role, description|
  SecurityUsersRole.find_or_create_by_role_and_description(role,description)
end

角色已创建,但我无法销毁它们 - 这是返回的错误消息:

ActiveRecord::StatementInvalid 在 /security_users_roles/2

ActiveRecord::JDBCError: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704,
SQLERRMC=DB2INST1.SECURITY_USERS_SECURITY_USERS_ROLES, DRIVER=3.65.77: 

SELECT security_users.* 
FROM security_users 
INNER JOIN security_users_security_users_roles 
  ON security_users.id = security_users_security_users_roles.security_user_id 
WHERE security_users_security_users_roles.security_users_role_id = 2

上面的语句不应该返回任何记录,因为我还没有创建任何用户,并将它们与角色相关联。

谁能告诉我做错了什么?

4

1 回答 1

0

在官方文档的本节末尾,它说:

最简单的经验法则是,如果您需要将关系模型作为独立实体使用,则应该设置一个 has_many :through 关系。如果您不需要对关系模型做任何事情,那么设置 has_and_belongs_to_many 关系可能会更简单(尽管您需要记住在数据库中创建连接表)

这就是问题的根源——我还没有创建连接表。如果您需要有关如何创建此中间连接表的更多详细信息,请查看Rails 没有创建中间表?- Habtm 关系

于 2013-06-25T16:00:05.160 回答