Как мне моделировать полиморфные отношения has_many в Rails 3 - PullRequest
0 голосов
/ 06 ноября 2011

Представьте, что у меня есть модель с именем Course, и у каждого курса есть_мани Modules.Однако я хочу, чтобы модули были другого диапазона типов.

Например, модель Module будет родительским классом и будет иметь два поля: title и description, которые будут общими для всех.все типы детей.

Теперь мне нужно Course, чтобы иметь возможность иметь любое количество экземпляров Slideshow, Video, Image, Text, однако их необходимо получить через Course#modules.

Учтите, что каждый тип дочернего класса имеет свои собственные атрибуты, например, Video может иметь поле url, тогда как Text может иметь, например, contents.

Что такоеправильный способ моделировать эту ассоциацию?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Это может быть немного поздно, но наличие в вашем приложении модели под названием «Модуль» вызовет всевозможные проблемы с конфликтами имен ...

0 голосов
/ 06 ноября 2011

Я думаю, что есть 2 варианта (возможно, в сочетании):

  • Используйте полиморфные ассоциации (см. "Полиморфные ассоциации" для примера). Ваша миграция должна выглядеть так:

    create_table :courses do |t|
      t.references :modules, :polymorphic => {:default => 'Text'}
    end
    
  • Использовать наследование одной таблицы: ваши модели разделены на подклассы из общего базового класса, и это реализовано в базе данных только одной таблицей, которая содержит все столбцы для всех классов моделей.

Взгляните на "Блог Алекса Уэстхолма" о 2 и сравнение. Я думаю, что вы должны идти с полиморфными ассоциациями, потому что ваши модули имеют много разных атрибутов.

...