我正在开发一个项目,我有一个可能有两种资产的实体:基本上是图片和视频。
由于我希望所有资产都位于同一个表上,并且只需要一个上传表单来显示图片或视频,我使用的是单表继承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
回调并尝试在那里实例化正确的类,但我不知道该怎么做或者它是否是好的想法。
对此有何想法?
答案 0 :(得分:1)
虽然你应该喜欢胖型和瘦式控制器,但这对我来说似乎更好地放在控制器中。我的主要理由是,通过在Asset
模型中执行此操作,您将基本类型与其子类型相关联,这对我来说并不合适(尽管我看到API始终执行此操作)。