问题是:如何在 Ruby on Rails 关联中表示多样性?假设我有两个模型 - Collection和Item。他们处于has_and_belongs_to_many关系中。如果一个集合包含多个相同的项目实例(例如,它包含 10 个相同的项目),我应该怎么做?
我尝试了has_many :through,但这似乎不是很好的方法。
问题是:如何在 Ruby on Rails 关联中表示多样性?假设我有两个模型 - Collection和Item。他们处于has_and_belongs_to_many关系中。如果一个集合包含多个相同的项目实例(例如,它包含 10 个相同的项目),我应该怎么做?
我尝试了has_many :through,但这似乎不是很好的方法。
首先,我想澄清一下,您确实想要多对多关系,而不仅仅是一对多,其中有重复的数据库记录来表示多重性。因为如果可以的话,您可以简单地items
根据需要多次复制记录并将它们的collection_id
外键指向适当的Collection
记录。
如果这不是您想要的,并且您确实想要多重性,那么我不会使用 ActiveRecord 关联来执行此操作。我将简单地存储一个数组或item_ids
inCollection
对象列表,并将该数组序列化/反序列化为数据库中的字符串或文本字段,以便:
collection.item_ids
=> [2, 3, 1, 1, 2, 1, 2, 2, 2, 2, 5, 6, 2, 3, 2]
其中item_ids
属性中的每个条目都是表的外键items
。
如果您碰巧使用 Postgres 作为您的数据库,我认为您实际上可以将列表/数组存储为Postgresarray
列,尽管我自己从未真正尝试在 Rails 中这样做。