Подходы к подкатегориям полиморфных ассоциаций в Rails - PullRequest
0 голосов
/ 12 февраля 2011

Здравствуйте все, У меня есть полиморфная ассоциация, используемая в настоящее время с несколькими различными моделями. Каждая модель имеет свой собственный видеофайл, связанный с ней, поэтому она использует «видеоизображаемую» полиморфную ассоциацию. Однако недавно я обнаружил необходимость создания новой модели с двумя отдельными типами видео. Я позволю коду говорить.

#current setup
class Video < ActiveRecord::Base
   belongs_to :videoable, :polymorphic => true
end


class Project < ActiveRecord::Base
    has_one :video, :as => videoable
end

# New model I am working on
class Assignment < ActiveRecord::Base
    has_one :video_draft
    has_one :video_final
end

В идеале модель назначения должна иметь два специальных типа видеообъектов, все еще используя полиморфную ассоциацию. Я рассмотрел наследование одной таблицы, но я не уверен, что это лучший подход здесь. Какие у меня варианты? Я не хочу создавать модель video_draft и модель video_final, потому что, в конце концов, они просто видео-вложения, как и все остальное. Единственное отличие состоит в том, что они представляют собой специализированные видео-вложения, которые нуждаются в собственном уникальном справочнике.

1 Ответ

0 голосов
/ 12 февраля 2011

Что вам нужно сделать, это сказать ActiveRecord, на какую модель вы ссылаетесь при объявлении :video_draft вместо :video, как в Project модели. Это можно сделать, передав параметр :class_name в has_one

Имея это в виду, это должно работать нормально:

class Assignment < ActiveRecord::Base
    has_one :video_draft, :as => :videoable, :class_name => "Video"
    has_one :video_final, :as => :videoable, :class_name => "Video"
end

См. направляющие рельсов в разделе 4.2.2.3 для получения дополнительной информации о необходимости прохождения :class_name.

...