Rails STI условного подкласса из базового класса - PullRequest
3 голосов
/ 21 декабря 2010

Я занимаюсь разработкой проекта, в котором у меня есть объект, который может иметь два вида активов: Изображения и Видео , в основном.

Поскольку я хочу, чтобы все ресурсы находились на одной таблице и в одной форме загрузки для Изображения или Видео , я использую Наследование одной таблицы, имеющее оба значения Изображение и Видео происходит от класса Актив . Кроме того, я буду выполнять различные проверки / обратные вызовы в зависимости от того, является ли это видео или изображение.

Я использую скрепку, чтобы справиться с процессом загрузки, и моя идея состоит в том, чтобы при загрузке файла и создании Актива с ним приложение создавало правильный подкласс ( Изображение или Видео ) в зависимости от типа mime загружаемого файла.

Это эскиз моих занятий:

class Project < ActiveRecord::Base
  has_many :assets
  accepts_nested_attributes_for :assets
end

class Asset < ActiveRecord::Base
  belongs_to :project
  has_uploaded_file :content, ...
end

class Picture < Asset
  validate :image_size
  ...
end

class Video < Asset
  after_save :convert_format
  ...
end

Моя идея состоит в том, чтобы реализовать обратный вызов before_save в классе Asset и попытаться создать там правильный класс, но я не уверен, как это сделать, или это хорошая идея.

Есть идеи по этому поводу?

1 Ответ

1 голос
/ 21 декабря 2010

Хотя вы должны отдавать предпочтение толстым моделям и тощим контроллерам, мне кажется, это лучше разместить в контроллере.Мое основное обоснование заключается в том, что, делая это в вашей Asset модели, вы связываете базовый тип с его подтипами, что мне не подходит (хотя я вижу, что API делают это постоянно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...