无法删除“has_and_belongs_to_many”连接的记录

时间:2013-06-24 15:59:32

标签: ruby-on-rails-3 associations

我有两个模型 - 用户角色。它们的关联如下:

user.rb

...
has_and_belongs_to_many :roles
...

role.rb

...
has_and_belongs_to_many :users
...

因此,用户可以拥有多个角色,并且角色可以与许多用户相关联。

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

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

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

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

  

ActiveRecord :: StatementInvalid at / 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

上述声明不应返回任何记录,因为我尚未创建任何用户,并将其与角色相关联。

谁能说出我做错了什么?

1 个答案:

答案 0 :(得分:0)

在官方文件的this部分结尾处说:

  

最简单的经验法则是你应该设置一个has_many   :如果你需要使用关系模型,通过关系   作为一个独立的实体。如果你不需要做任何事情   关系模型,设置一个可能更简单   has_and_belongs_to_many关系(虽然你需要记住   在数据库中创建连接表

这导致了问题 - 我还没有创建连接表。如果您需要有关如何创建此中间联接表的更多详细信息,请查看Rails not creating intermediary table? - Habtm relationship