3

我正在开发一个项目,我有一个实体,它可能有两种资产:基本上是图片视频

由于我希望所有资产都在同一张表上,并且为PicturesVideos提供一个上传表单,因此我使用的是 Single Table Inheritance,其中PictureVideo都从Asset类下降。此外,我将运行不同的验证/回调,具体取决于它是视频还是图片。

我正在使用回形针来处理上传过程,我的想法是在上传文件并使用它创建资产时,应用程序将根据上传文件的 mime 类型实例化正确的子类( PictureVideo ) .

这是我的课程的草图:

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

我的想法是在Asset类上实现before_save回调并尝试在那里实例化正确的类,但我不知道该怎么做或者这是否是个好主意。

对此有任何想法吗?

4

1 回答 1

1

虽然您应该喜欢胖模型和瘦控制器,但对我来说,这似乎更好地放置在控制器中。我的主要理由是,通过在您的Asset模型中执行此操作,您将基类型耦合到其子类型,这对我来说感觉不对(尽管我看到 API 一直在这样做)。

于 2010-12-21T02:13:37.100 回答