Pull to refresh

Comments 12

Описано в Rails Edge Guides и пока что отсутствует в стабильной версии.


Какого года статья? 2008-2009?
Оно еще во 2-й версии было. Возможно в гайдах и не было.
Основная суть такая. Используем STI если набор аттрибутов у каждого объекта примерно одинаков, но объекты имеют разное поведение. В других случаях ваш второй вариант.

Ну а если уж совсем MTI охота, то берем gem Sequel. В нем есть — Sequel::Plugins::ClassTableInheritance (гем не совсем для этих целей, но умеет и это)

Или github.com/hzamani/acts_as_relation (но там багов хватает)
Собственно, упомянутый active_record-acts_as – это продолжение заброшенного acts_as_relation, как следует из readme на Github. Что касается Sequel – да, намного более матёрый гем чем active_record-acts_as, посмотрю, спасибо.
Если юзается Postgres, то можно вынести частные поля в колонку с типом jsonb. Даже отношения можно замутить, если сделать View для каждой под-модели + в этом случае не нужно будет поле type. Всего пара костылей в абстракции, чтобы все работало как надо. Стильно, модно, молодежно, но особо никаких профитов по производительности, делаю так только чтобы ради единственной связи несколько отдельных таблиц не создавать.
а потом окажется что надо обновить 900000 записей такой «псевдомодели» без простоя сервиса, распарсив json каждого, внеся изменения, и сохранив обратно.
Postgres 9.5 уже умеет обновлять поля в jsonb функцией.
А как же полиморфизм? Хабр не даёт вставлять код из-за кармы, вот ссылка на код
pastebin.com/VZScxira
А потому что полиморфизм про другое.
Sign up to leave a comment.

Articles