私は自分のファイルをAmazons3に保存しています。各ファイルには多くの「コンシューマー」があり、これらのコンシューマーは任意のタイプ(ユーザー、外部アプリ、business_listingsなど)にすることができます。これには、多対多の関係が必要です。ただし、各関係に関する特定の属性も保存したいと思います。したがって、これに取り組む最善の方法は、「s3_files」とコンシューマーの間に*has_and_belngs_to_many_through*関係を作成することだと思います。
問題は、消費者のタイプが多いため、ポリモーフィックな関連付けを使用する必要があるということです。
したがって、これに基づいて、次の手順を実行します。
1) Create a model: "resource_relationship"
2) Have these fields in it:
t.string: consumer_type
t.string: s3_fileType
t.string: file_path
t.string: consumer_type
t.integer: s3_file.id
t.integer: consumer.id
t.integer: resource_relationship.id
3) Add to the model:
belongs_to: s3_file
belongs_to: consumer
4) add_index:[s3_file.id, consumer.id]
5) Inside: s3_file
nas_many: resource_relationships
has_many:consumers :through=> :resource_relationships
6) Inside: Users
nas_many: resource_relationships
has_many:s3_files :through=> :resource_relationships
7) Inside: business_listings
nas_many: resource_relationships
has_many:s3_files :through=> :resource_relationships
私の混乱は、この関係の多形部分にあります。
私は「消費者」モデルを持っていないので。それがこの方程式にどのように当てはまるのかわかりません。私はいくつかのチュートリアルをオンラインで見て、上記の方法と概念を思いついたが、これがこの問題に取り組む正しい方法であるかどうかは定かではない。
基本的に、ここで「コンシューマー」はすべてのモデルが「実装」するインターフェースのようなものであり、S3_fileモデルはこのインターフェースを「実装」した任意のモデルに関連付けることができることを理解しています。問題は、モデルをどこでどのように実行するかです。ユーザーとbusiness_listingsは、この「コンシューマー」インターフェースを「実装」します。どうすれば設定できますか?