3

基本的に、写真ビデオの2種類のアセットを持つエンティティがあるプロジェクトを開発しています。

すべてのアセットを同じテーブルに配置し、PicturesまたはVideosのいずれかに対して単一のアップロードフォームを作成する必要があるため、Assetクラスの子孫であるPictureVideoの両方を持つ単一テーブル継承を使用しています。また、ビデオか画像かに応じて、さまざまな検証/コールバックを実行します。

私はペーパークリップを使用してアップロードプロセスを処理しています。ファイルをアップロードしてアセットを作成するときに、アプリケーションはアップロードされたファイルの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クラスにコールバックを実装し、そこで正しいクラスをインスタンス化しようとすることですが、それを行う方法や、それが良い考えかどうかはわかりません。

これについて何か考えはありますか?

4

1 に答える 1

1

ファット モデルとスキニー コントローラーを優先する必要がありますが、これはコントローラーに配置する方がよいように思えます。私の主な理論的根拠は、Assetモデルでこれを行うことにより、基本型をそのサブタイプに結合していることです。これは、私には適切ではないと感じています (ただし、API が常にそれを行うのを見ています)。

于 2010-12-21T02:13:37.100 に答える