Как реализовать наследование класса-таблицы в Rails?
Я только что закончил работу над книгой Agile Web Development с Rails, четвертое издание (http://pragprog.com/book/rails4/agile-web-development-with-rails), и вам нужна помощь в понимание того, как создать отношения между родителями и детьми между моделями. Я сделал некоторый Googling и ткнул сюда на StackOverflow и узнал в основном об одном наследовании таблицы и наследовании таблицы классов.
У меня есть куча метаданных о разных элементах в архивной коллекции. Значительная часть метаданных одинакова для всех объектов, например номер доступа, название, описание, авторское право и т.д. В дополнение к общим метаданным есть метаданные, которые применимы только к определенным типам предметов, например, фотографии должны содержать отслеживать, является ли элемент цветным или черно-белым; звукозаписи должны отслеживать формат (CD, DAT, кассетная лента и т.д.) и продолжительность; текстовые материалы должны отслеживать количество страниц; и др.
Class hierarchy
Item
|
+-----------+------------+
| | |
Photo SoundRecording Text
Так как у меня будет много тысяч записей, я исключил бы однонамерное наследование как слишком неэффективное. Я понимаю идею наследования таблицы классов, представленную здесь: http://martinfowler.com/eaaCatalog/classTableInheritance.html, но я смущен тем, как я бы это сделал в новом Ruby on Rails проект. Я реализую наследование таблицы классов как полиморфную ассоциацию (http://guides.rubyonrails.org/association_basics.html#polymorphic-associations), или я ошибаюсь?
Спасибо.
Ответы
Ответ 1
Да.
Это сводится к этому (в Rails 3)
class Business < ActiveRecord::Base
belongs_to :biz, :polymorphic => true
end
class Restaurant < ActiveRecord::Base
acts_as_biz
end
Здесь очень хороший учебник о том, как это сделать.
http://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/
Ответ 2
Есть драгоценный камень, который делает это чисто, и он также поддерживает рельсы 5.1
https://github.com/mvdamme/dbview_cti