Светильники 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" в алфавитном порядке

Узнайте больше здесь.

Другие вопросы по тегам