У меня есть приложение в Rails, где я создаю модель с именем User и другую с именем Task.
Пользователь модели имеет enum
для ролей, что означает, что у меня может быть Пользователь, который является клиентом или разработчиком:
require 'bcrypt'
class User < ApplicationRecord
has_many :tasks
enum :role => [
:client,
:developer
]
has_secure_password
validates_uniqueness_of :document, :email
validates_presence_of :birthdate,
:credits,
:document,
:email,
:name,
:neighborhood,
:phone,
:street,
:street_number,
:zipcode
end
Задачей модели может управлять клиент или разработчик:
class Task < ApplicationRecord
enum :priority => [
:low,
:medium,
:high
]
validates_presence_of :description, :title
end
Я почти уверен, что было бы лучше, если бы я разделил таблицу User на две другие таблицы, например, под названием Client и Developer, но их атрибуты совпадают, и в будущем я хочу иметь возможность быстро измените пользователя с ролью :client
на роль :developer
, не создавая запись в таблице Developer и не удаляя другую в таблице Client.
У меня такой вопрос: если подумать о передовой практике, лучше ли вставить два поля модели Task, одно из которых называется client_id
, а другое - developer_id
и использовать Наследование в одной таблице или создать отношение «многие ко многим» между заданием модели и пользователем модели и просто проверить роль каждого пользователя, на которого ссылается задание?