У меня проблемы с выбором между наследованием одной таблицы и простым отношением has_one для двух моих моделей.
Справочная информация: я создаю сайт для ставок с моделью "Ставка". Пользователи могут создавать ставки, после чего они отображаются всем пользователям, которые могут принять ставки, если они того пожелают. Модель ставок имеет перечисление с тремя статусами: создано, принято и завершено.
Теперь я хочу добавить функцию «Любимое пари». Смысл этого в том, чтобы пользователям было удобнее создавать ставки, если они есть, которые они обычно создают. Один щелчок вместо десяти.
Любимые пользователи существуют только в виде сохраненного проекта. Это просто детали ставки - когда пользователь хочет создать ставку, он может просмотреть FavoriteWager и щелкнуть «создать», чтобы получить все поля FavoriteWager и создать с ними пари. Таким образом, разница в том, что FavoriteWager действует только как хранилище для Wager, а также включает в себя имя, указанное пользователем.
Я прочитал о STI, и кажется, что во многих примерах есть несколько подклассов - например, , Автомобиль, Мотоцикл, Лодка для класса «Автомобиль». Тогда как у меня не будет нескольких подклассов, только один (FavoriteWager
С другой стороны, has_one, похоже, неправильно отражает отношения. Вот пример:
Class User < ApplicationRecord
has_many :favorite_wagers, dependent: :destroy
has_many :wagers, dependent: destroy
end
Class FavoriteWager < ApplicationRecord
has_one :wager
belongs_to: user, index: true, foreign_key: true
end
Class Wager < ApplicationRecord
belongs_to :favorite_wager, optional: true
belongs_to :user
end
Я также думал о прямом копировании полей, но это не очень DRY. Добавление перечисления с параметром «черновик» кажется слишком небольшим, потому что в будущем мне может понадобиться добавить больше полей (например, время для автоматического создания), после чего оно начнет превращаться во что-то другое. Мысли о том, как подойти к этому?