Так у меня есть структура базы данных, которая выглядит примерно так:Индивидуальное наследование или полиморфное наследование?
События:
event_id: :integer
event_type: :string
name: :string
slug: :string
user_id: :integer
start: :datetime
finish: :datetime
и Свадьбы, которые мне нужно наследоваться от событий:
bride_name: :string
groom_name: :string
street: :string
city: :string
state: :string
zip: :integer
receptions: :text
Я хочу, чтобы иметь возможность создать Свадьбу или любое другое событие, если на то пошло, и унаследовать черты, которые являются общими для всех событий из модели Event. Когда я попытался сделать это с помощью STI, модель Свадьбы имела только черты модели Event. Как это реализовать?
Это не работает
class Wedding < Event
attr_accessor :receptions, :reception_name, :reception_address, :reception_city, :reception_state, :reception_zip
end
У вас есть столбец 'type' в вашей таблице STI для Rails для сохранения типа события? Кажется, вас не хватает в вашем списке. –
Да, когда я пробовал ИППП, я это сделал. То, что я перечислил, - это структура, которую я хотел бы иметь. Даже когда у меня был столбец типа, он просто создал объект с атрибутами модели Event – watzon
. Для этого вам не нужны никакие инструкции 'attr_accessor' для доступа к атрибутам из вашей модели. Это облегчает чтение. Для работы STI достаточно иметь столбец 'type' (с соответствующим контентом) и наследовать в Ruby-коде. Если вы хотите MTI, вы можете попробовать https://github.com/hzamani/active_record-acts_as –