0

我有物品清单。这些项目可以属于多个列表。这很容易通过定义多对多关系来完成。

class List
  include MongoMapper::Document

  key :item_ids, Array
  many :items, :in => :item_ids
end

但我也希望对列表进行排序。一个项目可以在一个列表中的索引 2 上,而在另一个列表中的索引 4 上。通常我会使用带有“位置”字段的连接表,但我无法理解如何使用 MongoMapper 完成这样的事情,因为每个人似乎都建议不要在没有 SQL 的环境中使用连接表(这使得完美的感觉)。

在 MongoDB 中使用连接表是个好主意,还是使用其他机制来完成此操作?和奖励点:我如何在 MongoMapper 中实现这一点?

4

1 回答 1

0

item_ids是一个数组。因此,它将是自然排序的 - 您可以简单地将项目items按照您希望它们所在的顺序插入到您的关联中。如果您想重新排序它们,只需item_ids按一些标准对数组进行排序并保存文档,或者当您从数组中使用它们时对它们进行排序。

# When consuming the list
@list.items.sort_by &:name

# Or if you want to persist the order
@list.item_ids = @list.items.sort {|item| ... }.map(&:id)
@list.save
于 2013-09-05T02:48:44.827 回答