我如何分配一个独特的水平评估有许多多态关系,轨道



因此,我正在尝试想出一种智能/最好的rails方法来实现这一点,并希望与So用户讨论最佳方法。

本质上,我有两个模型,让我们称第一个为照片,第二个为属性。照片有很多属性(例如,让我们给出饱和度、颜色、温暖度等)。属性模型包含名称和id。评级模型包含一个整数字段。照片和属性模型通过照片关系模型和多态关联进行关联。原因是我在这个表中存储了一张照片的许多其他关系(而不是大量的关系表)。假设我必须使用这些模型,因为它们已经就位,但我可以更改它们或添加其他模型。以下是模型关系的工作方式:

在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

在Attribute.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表,它是非多态的,即使在这种情况下,我也看不出关系是如何工作的。

任何人都可以提供任何信息、想法或关于如何做到这一点的替代建议,我们将不胜感激!谢谢

我建议您使用已经提供评级功能的宝石之一:
https://www.ruby-toolbox.com/categories/rails_ratings

如果您想从头开始为现有模型添加评级功能,请考虑使用mixins(模块),因为您的模型关联非常复杂。有关mixin用法的有用信息,请点击此处:
ruby继承与mixin

最新更新