Как реализовать наследование таблиц классов в 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

https://github.com/mvdamme/dbview_cti

Другие вопросы по тегам