Светильники 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.yml
это определяет права администратора, а затем ошибки исчезают.
Похоже, что светильники предполагают, что соединительный стол называется permissions_roles
когда он на самом деле назван roles_permissions
Как мне сказать правильное имя таблицы?
2 ответа
По соглашению, имя объединяющей таблицы между двумя таблицами именуется в алфавитном порядке.
Итак, таблица соединения между roles
а также permissions
должен быть назван 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" в алфавитном порядке
Узнайте больше здесь.