我有两个模型 - 用户和角色。它们的关联如下:
在 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
上述声明不应返回任何记录,因为我尚未创建任何用户,并将其与角色相关联。
谁能说出我做错了什么?
答案 0 :(得分:0)
在官方文件的this部分结尾处说:
最简单的经验法则是你应该设置一个has_many :如果你需要使用关系模型,通过关系 作为一个独立的实体。如果你不需要做任何事情 关系模型,设置一个可能更简单 has_and_belongs_to_many关系(虽然你需要记住 在数据库中创建连接表。
这导致了问题 - 我还没有创建连接表。如果您需要有关如何创建此中间联接表的更多详细信息,请查看Rails not creating intermediary table? - Habtm relationship