2

Так у меня есть структура базы данных, которая выглядит примерно так:Индивидуальное наследование или полиморфное наследование?

События:

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 
+0

У вас есть столбец 'type' в вашей таблице STI для Rails для сохранения типа события? Кажется, вас не хватает в вашем списке. –

+0

Да, когда я пробовал ИППП, я это сделал. То, что я перечислил, - это структура, которую я хотел бы иметь. Даже когда у меня был столбец типа, он просто создал объект с атрибутами модели Event – watzon

+1

. Для этого вам не нужны никакие инструкции 'attr_accessor' для доступа к атрибутам из вашей модели. Это облегчает чтение. Для работы STI достаточно иметь столбец 'type' (с соответствующим контентом) и наследовать в Ruby-коде. Если вы хотите MTI, вы можете попробовать https://github.com/hzamani/active_record-acts_as –

ответ

1

как салазки только поддерживает STI из коробки, если вы действительно хотите MTI, вы можете дать ActiveRecord::ActsAs Gem выстрел.

В их трекере есть пара открытых проблем, но развитие кажется несколько активным.

Смежные вопросы