0

所以我试图想出一个聪明/最好的方法来做到这一点,并希望与 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 表,即使在这种情况下,我也看不到这些关系是如何工作的。

任何人都可以提供的任何信息、想法或有关如何执行此操作的替代建议将不胜感激!谢谢!

4

1 回答 1

2

我建议您使用提供评级功能的现有 gem 之一:
https ://www.ruby-toolbox.com/categories/rails_ratings

如果您想从头开始向现有模型添加评分功能,那么请考虑使用mixins(模块),因为您的模型关联非常复杂。有关 mixin 使用的有用信息:
ruby 继承 vs mixins

于 2012-09-11T12:51:39.517 回答