所以我试图想出一个聪明/最好的方法来做到这一点,并希望与 SO 用户讨论最好的方法。
基本上我有两个模型,让我们称第一个为照片,第二个为属性。一张照片有很多属性(例如,让我们给出饱和度、颜色、暖度等)。Attribute 模型带有 name 和 id。Rating 模型带有一个整数字段。Photo 和 Attribute 模型通过 PhotoRelationship 模型,通过多态关联相关联。这样做的原因是一张照片有_许多我存储在此表中的其他关系(而不是拥有大量关系表)。假设我必须使用这些模型,因为它们已经存在,但我可以更改它们或添加其他模型。以下是模型关系的工作方式:
在 Photo.rb 中:
has_many :photo_relationships
has_many :attributes, :through => :photo_relationships, :source => :related_attribute, :source_type => "Attribute"
在 PhotoRelationship.rb
belongs_to :photo #photo_id
belongs_to :related_attribute, :polymorphic => true
在属性.rb
has_many :photo_relationships, :as => :related_attribute, :dependent => :destroy
has_many :photos, :through => :photo_relationships
假设我还想评价照片模型的属性。我介绍了第三种模型评级,因为每个照片属性配对都会有一个特定的评级,然后与之相关联。
我想弄清楚如何处理照片属性配对与其评级之间的关系。例如,假设我们有一张具有一定数量属性的照片,我们想要找到该照片的第一个属性的评级。然后:
photo = Photo.first
photo.attributes.first.rating
我将如何在数据库中设置它?我想我可以在 PhotoRelationship 模型中添加一个 rating_id 字段,该模型已经为每个照片属性对提供了唯一的条目。
这行得通吗,我能以某种方式将属性与其评级联系起来吗?有些东西告诉我缺少某些东西。我感觉我需要一个单独的非多态的 AttributeRelationship 表,即使在这种情况下,我也看不到这些关系是如何工作的。
任何人都可以提供的任何信息、想法或有关如何执行此操作的替代建议将不胜感激!谢谢!