Rails夹具得到表名错误

我有一个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.ymlroles.yml指定管理员权限的roles.yml ,错误就会消失。

看起来夹具假设连接表在实际命名为roles_permissions时被命名为roles_permissions

我如何告诉它正确的表名?

按照惯例,两个表之间的连接表名称按字母顺序命名。

因此, rolespermissions之间的连接表应命名为permissions_roles

您需要创建表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”之前

在这里阅读更多。