gpt4 book ai didi

ruby-on-rails - Mongoid 多对多问题

转载 作者:可可西里 更新时间:2023-11-01 09:58:30 25 4
gpt4 key购买 nike

我想将博客及其标签存储为单独的文档。

博文应该有 tag_ids 字段,标签不应该有 blog_posts_ids 字段。

Mongoid 提供开箱即用的多对多关系,但它要求多对多关系的两个文档都具有 _ids 字段。

class BlogPost
include Mongoid::Document
field :title
references_many :tags, :stored_as => :array, :inverse_of => :blog_posts
end

class Tag
include Mongoid::Document
field :name
# I DON'T WANT TO STORE BLOG_POSTS_IDS IN TAG DOCUMENT
references_many :blog_posts, :stored_as => :array, :inverse_of => :tags
end

最佳答案

您可以使用 Tag 上的方法来伪造关联的另一端

class BlogPost
include Mongoid::Document
field :title
references_many :tags, :stored_as => :array, :inverse_of => :blog_posts
end

class Tag
include Mongoid::Document
field :name

def blog_posts
# will match all BlogPost records where the tag_ids array contains self.id
BlogPost.where(:tag_ids => self.id)
end
end

显然,这不如 :references_many 功能全面,但您可以类似地伪造多对多关系的其他方面。例如,如果您希望能够将新的 blog_post 分配给标签,您可以将简单的 create_blog_post 方法添加到 Tag

对于许多现实世界的情况,只要您保持方法简单并且不要忘乎所以,这种方法是实用的。

关于ruby-on-rails - Mongoid 多对多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4121632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com