我在设计数据模型时遇到了麻烦。
我有主对象“A”及其子对象“B”,“B”有很多“C”,但有些“C”也可以是免费的(不属于任何“B”)。
通过标准 mas_many/belongs_to Mongoid 相关外键存储在“C”中。而且它并没有那么糟糕,即使它是孤儿也能正常工作,但我认为它看起来并不好。有什么方法可以让 Mongoid 将子 ID 存储在父列表字段中?
我在设计数据模型时遇到了麻烦。
我有主对象“A”及其子对象“B”,“B”有很多“C”,但有些“C”也可以是免费的(不属于任何“B”)。
通过标准 mas_many/belongs_to Mongoid 相关外键存储在“C”中。而且它并没有那么糟糕,即使它是孤儿也能正常工作,但我认为它看起来并不好。有什么方法可以让 Mongoid 将子 ID 存储在父列表字段中?
您所描述的听起来像belongs to many
,并且有一种方法可以通过has_and_belongs_to_many
在 B 类上使用关系来实现。
但在我看来,您最初的方法在语义上更好,但这取决于您自己的选择。
对于未来的观众......
我结束了使用:
has_and_belongs_to_many
在 B 上belongs_to
在 C 上before_add
在has_and_belongs_to_many的回调中,我添加了类似object_to_add.c_id ||= self.id
. 这样,您就可以在父项中列出 ID。
具有多个类别的播放列表的示例:
class Playlist
has_and_belongs_to_many :categories, before_add: :add_playlist_id, inverse_of: :playlist
private
def add_playlist_id(category)
category.playlist_id ||= id
end
end
class Category
belongs_to :playlist, inverse_of: :categories
end