Примеры и советы по объединению полиморфной ассоциации и наследования одной таблицы - PullRequest
0 голосов
/ 05 мая 2011

Я использую Ruby on Rails 3, и я хотел бы узнать пример из реального мира (или более) и несколько советов о том, когда я должен \ могу \ должен использовать комбинацию Полиморфная ассоциация и Единое наследование таблицы , как реализовано здесь, в параграфе Полиморфная ассоциация .

Ответы [ 2 ]

1 голос
/ 05 мая 2011

По моему опыту, полиморфные отношения = хорошие и ИППП = PainInTheArse.

Я никогда не видел пример ИППП, который не превращается в запутанный беспорядок.

Если у вас разныевещи, которые имеют одинаковые отношения с одним или несколькими другими классами, затем сохраняют их как разные вещи со своими собственными таблицами.Например, прикрепление документов: вы можете прикрепить документы к множеству разных вещей.Для этого используйте полиморфные отношения, называемые, например, «документируемыми».

Document
  belongs_to :documentable, :polymorphic => true
  #expects a documentable_id field (integer) and a documentable_type field (string)

User
  has_many :documents, :as => :documentable

Company 
  has_many :documents, :as => :documentable
0 голосов
/ 05 мая 2011

Используйте STI, когда вам нужно, чтобы все было в одном объекте / таблице.Отношения к другим объектам, атрибутам и проверкам могут меняться в зависимости от состояния объекта.

Используйте полиморфные отношения, когда ваш объект относится к другому объекту неопределенного типа.Смотрите пример по # max-williams

...