Таблица соединений Rails для более чем двух таблиц - PullRequest
0 голосов
/ 30 марта 2020

Я ищу способ объединить четыре таблицы вместе с таблицей объединения в Rails 5.2, но пока нашел только способ объединения двух таблиц.

Мои таблицы:

Users
Groups
Events
Roles

Они все многие: многие. Таблица Роли содержит все возможные роли, которые существуют в системе.

В качестве примера использования предположим, что роль с идентификатором 16 - это «can_delete_event» со значением true , тогда как идентификатор роли 17 имеет то же правило со значением false .

Роли:

ID  | Title             | Value
--------------------------------
16  | can_delete_event  | true
17  | can_delete_event  | false

В этом случае пользователь в любой группе, имеющей роль 16, может удалить любое событие, которому он назначен, но если он также находится в группе с ролью 17 эта специфицирующая способность c удалена, а все остальные правила этой группы остаются. Такое поведение переопределения также применимо, если на пользователя ссылается непосредственно его идентификатор пользователя в таблице ролей.

Таким образом, если пользователь № 12 находится в группе № 2 и хочет удалить событие № 25, он должен быть хотя бы одной из этих записей в таблице соединений:

Event | User | Group | Role
---------------------------
25    | 12   |       | 16
25    |      | 2     | 16

Теперь вопрос How on earth can I link all these tables together in Rails?. Я портирую веб-сайт PHP на Rails, и в версии PHP все работает нормально с той же структурой базы данных. Я знаю, что могу построить это как обычную таблицу и использовать ее таким образом, но я хочу сделать все правильно, поэтому я создаю хорошую практику для будущих (более важных) проектов.

Скорость не беспокойство, так как только небольшая база сотрудников будет обновлять детали событий, и только несколько раз в месяц.

Я пробовал это:

class CreateEventGroupRoleUsers < ActiveRecord::Migration[5.2]
  def change
    create_join_table :events, :groups, :roles, :users do |t|
      t.index :event_id
      t.index :group_id
      t.index :role_id
      t.index :user_id
    end
  end
end

Но я получил эту ошибку во время миграции:

ArgumentError: wrong number of arguments (given 4, expected 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...