Mongoid - 从 M:N 集合中移除实体但不删除它

Mongoid - remove entity from M:N collection but not delete it

我需要从集合中删除相关实体。 因此,例如我有 M:N 关系:有多个用户的项目(并且用户可以有多个项目)。

如何从项目中删除用户,但不删除他?

# this removes user from project, but also deletes user
project.users.find(id: user._id).remove

谢谢

假设我们有乐队并且它有多个标签:

band = Band.all[1]
=> #<Band _id: 599d2c8a9d1fa2c5498024cc, name: "test_band", tag_ids: [BSON::ObjectId('599d2c8a9d1fa2c5498024cd'), BSON::ObjectId('599d2c8a9d1fa2c5498024ce'), BSON::ObjectId('599d2c8a9d1fa2c5498024cf')]>

然后如果我们尝试删除一个相关的标签对象:

band.tags.delete(Tag.find(id: '599d2c8a9d1fa2c5498024cd')
...
MONGODB | localhost:27017 | test_development.update | SUCCEEDED | 0.000634s
=> #<Tag _id: 599d2c8a9d1fa2c5498024cd, name: "test_tag1", band_ids: []>

它将从 band.tags 数组中删除:

irb(main):088:0> band
=> #<Band _id: 599d2c8a9d1fa2c5498024cc, name: "test", tag_ids: [BSON::ObjectId('599d2c8a9d1fa2c5498024ce'), BSON::ObjectId('599d2c8a9d1fa2c5498024cf')]>

但该标签仍然作为对象存在:

Tag.find(id: '599d2c8a9d1fa2c5498024cd')
=> #<Tag _id: 599d2c8a9d1fa2c5498024cd, name: "test_tag1", band_ids: []>