Как реализовать наследование таблиц классов в Rails?
Я только что закончил работу над книгой Agile Web Development с Rails, четвертое издание ( http://pragprog.com/book/rails4/agile-web-development-with-rails), и мне нужна помощь в понимании того, как создавать отношения родитель-ребенок между моделями. Я немного погуглил и покопался здесь в Stackru и узнал в основном о наследовании отдельных таблиц и наследования таблиц классов.
У меня есть куча метаданных о различных предметах в архивной коллекции. Большая часть метаданных одинакова для всех объектов, например, номер доступа, заголовок, описание, авторское право и т. Д. В дополнение к общим метаданным, существуют метаданные, которые применимы только к определенным типам элементов, например, фотографии должны быть сохранены. отслеживание того, является ли элемент цветным или черно-белым; звукозаписи должны отслеживать формат (CD, DAT, кассета и т. д.) и длительность; текстовые материалы должны отслеживать количество страниц; и т.п.
Class hierarchy
Item
|
+-----------+------------+
| | |
Photo SoundRecording Text
Поскольку у меня будет много тысяч записей, я исключил наследование одной таблицы как слишком неэффективное. Я понимаю идею наследования таблиц классов, представленную здесь: http://martinfowler.com/eaaCatalog/classTableInheritance.html но не совсем понимаю, как бы я реализовал это в новом проекте Ruby on Rails. Реализую ли я наследование таблиц классов как полиморфную ассоциацию ( http://guides.rubyonrails.org/association_basics.html) или я на неверном пути?
Спасибо.
2 ответа
Да. Это сводится к этому (в 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/
Существует драгоценный камень, который делает это чисто, и он также поддерживает рельсы 5.1