0

皆さん、こんにちは。現在、いくつかの異なるモデルで使用されているポリモーフィック アソシエーションがあります。各モデルには独自のビデオ ファイルが関連付けられているため、「ビデオ可能」なポリモーフィック アソシエーションが使用されます。しかし最近、2 種類のビデオを持つ新しいモデルを作成する必要があることがわかりました。コードに話させます。

#current setup
class Video < ActiveRecord::Base
   belongs_to :videoable, :polymorphic => true
end


class Project < ActiveRecord::Base
    has_one :video, :as => videoable
end

# New model I am working on
class Assignment < ActiveRecord::Base
    has_one :video_draft
    has_one :video_final
end

理想的には、割り当てモデルは、ポリモーフィック アソシエーションを使用しながら、2 つの特別なタイプのビデオ オブジェクトを持ちます。単一テーブルの継承を検討しましたが、これが最善のアプローチかどうかはわかりません。私のオプションは何ですか?私は video_draft モデルと video_final モデルを作成したくありません。結局のところ、これらは他のすべてのビデオの添付ファイルに過ぎないからです。唯一の違いは、独自の参照が必要な特殊なビデオ添付ファイルであることです。

4

1 に答える 1

0

あなたがする必要があるのは、モデルのようにではなくActiveRecord宣言するときに、どのモデルを参照しているかを伝えることです。これは、オプションを渡すことで実行できます:video_draft:videoProject:class_namehas_one

これを念頭に置いて、これはうまくいくはずです:

class Assignment < ActiveRecord::Base
    has_one :video_draft, :as => :videoable, :class_name => "Video"
    has_one :video_final, :as => :videoable, :class_name => "Video"
end

pass の必要性についての詳細は、セクション 4.2.2.3 のRails ガイドを参照してください:class_name

于 2011-02-12T16:17:57.120 に答える