gpt4 book ai didi

ruby-on-rails - 与祖先建立家庭关系模型?

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:30 26 4
gpt4 key购买 nike

我查看了 github 上的 acts_as_tree 和 ancestry gems,但我不认为它们符合我的要求。我进行了搜索,但找不到任何符合我尝试的内容。

所以,基本上只是一个带有页面的 CMS。页面是标题:字符串和正文:文本。页面可以嵌套在其他页面之下,也可以嵌套其他页面。

因此,例如,所有这些都是“页面”

hardware
hardware/servers
hardware/servers/server1
hardware/servers/server1/parts/powersupply

理想情况下,我可以得到 servers.children 并获得子孙。

所以这很好。和 acts_as_tree 等都可以。

但是对于页面关系,我也想这样做:

hardware/servers/server1
equipment/IT/server1
maintenance/monthly/server1/

friends/sally
coworkers/sally

所以,我想我希望它有很多 parent ?类似的东西。我希望能够从各种“路径”访问同一页面。

所以我不确定那会是什么样子。我会做某种类型的连接模型吗,因为有一些“has_many”,而以前它只是 parent_id?

最佳答案

你是对的,有很多 parent 都不适合这两种模式。相反,您想要的是实现一个图形。根据您的描述,它可能是非循环的,即它没有任何循环,或者换句话说,一个页面永远不会是其自身的子页面,这可以导致某些优化。

这里使用的一般模式是页面之间的多对多关系。为此,您将在 parentchild 之间创建一个连接模型。

作为改编自 previous answer of mine 的示例:

class Page < ActiveRecord::Base
has_many :parent_page_links,
:class_name => 'PageLink',
:foreign_key => :child_id

has_many :parents,
:through => :parent_page_links,
:source => :parent

has_many :child_page_links,
:class_name => 'PageLink',
:foreign_key => :parent_id

has_many :children,
:through => :child_page_links,
:source => :child
end

class PageLink < ActiveRecord::Base
belongs_to :parent,
:class_name => "Page"
belongs_to :child,
:class_name => "Page"
end

这不会像使用 Ancestry 那样高效,因为 Ancestry 有很多关于为您缓存的关系的信息,但如果性能是一个要求,您可以将其中一些功能移植到这个结构中。

关于ruby-on-rails - 与祖先建立家庭关系模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987266/

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