基本的に、写真とビデオの2種類のアセットを持つエンティティがあるプロジェクトを開発しています。
すべてのアセットを同じテーブルに配置し、PicturesまたはVideosのいずれかに対して単一のアップロードフォームを作成する必要があるため、Assetクラスの子孫であるPictureとVideoの両方を持つ単一テーブル継承を使用しています。また、ビデオか画像かに応じて、さまざまな検証/コールバックを実行します。
私はペーパークリップを使用してアップロードプロセスを処理しています。ファイルをアップロードしてアセットを作成するときに、アプリケーションはアップロードされたファイルの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
私の考えは、 Assetbefore_save
クラスにコールバックを実装し、そこで正しいクラスをインスタンス化しようとすることですが、それを行う方法や、それが良い考えかどうかはわかりません。
これについて何か考えはありますか?