我有一个roles
表,一个permissions
表,并以roles_permissions
表的多对多关系加入它们。
在roles.yml
文件中,我有这个:
admin:
name: admin
permissions: create_user, edit_user, view_all_users
在permissions.yml
我有:
create_user:
name: create_user
description: Create a new user
edit_user:
name: edit_user
description: Edit any user details
view_all_users:
name: view_all_users
description: View all users
现在rake test
错误地说no such table: permissions_roles: DELETE FROM "permissions_roles"
当我在roles.yml
中注释掉指定管理员权限的行时,错误就会消失。
看起来夹具假设连接表名为permissions_roles
,当它实际命名为roles_permissions
如何告诉它正确的表名?
答案 0 :(得分:2)
按照惯例,两个表之间的连接表名称按字母顺序命名。
因此,roles
和permissions
之间的联接表应命名为permissions_roles
。
答案 1 :(得分:0)
您需要创建表格permissions_roles
而不是roles_permissions
,或者在选项(:join_table
)中设置表格:
has_and_belongs_to_many :roles, join_table: "roles_permissions"
<强> #has_and_belongs_to_many 强>:
除非明确指定连接表作为选项,否则使用类名的词法顺序进行猜测。因此,Developer和Project之间的连接将提供默认的连接表名称“developers_projects”,因为“D”按字母顺序排在“P”之前
了解更多here。