Подтвердить что ты не робот

Как реализовать наследование класса-таблицы в 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), или я ошибаюсь?

Спасибо.

4b9b3361

Ответ 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