Rails从基类开始STI条件子类

时间:2010-12-20 23:45:15

标签: ruby-on-rails paperclip nested-attributes sti

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

由于我希望所有资产都位于同一个表上,并且只需要一个上传表单来显示图片视频,我使用的是单表继承em>图片和视频 Asset 类下降。此外,我将运行不同的验证/回调,具体取决于它是视频还是图片。

我正在使用paperclip处理上传过程,我的想法是在上传文件并使用它创建资产时,应用程序将实例化正确的子类( Picture 视频)取决于上传文件的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

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

对此有何想法?

1 个答案:

答案 0 :(得分:1)

虽然你应该喜欢胖型和瘦式控制器,但这对我来说似乎更好地放在控制器中。我的主要理由是,通过在Asset模型中执行此操作,您将基本类型与其子类型相关联,这对我来说并不合适(尽管我看到API始终执行此操作)。