我将文件存储在 Amazon s3 上。每个文件都有许多“消费者”,这些消费者可以是任何类型(用户、外部应用程序、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 模型可以将自己与任何“实现”此接口的模型相关联。问题是模型如何以及在哪里做的:用户和业务列表“实现”这个“消费者”接口。我该如何设置?