MongoDB mongoid自我引用关系

Ale*_*lex 6 mongodb mongoid

我是mongo/mongoid的新手,我正在尝试在我的网站表上设置自引用关系.

# sites model

has_many :child_sites, :class_name => 'Site'
belongs_to :parent, :class_name => 'Site'

#controller

@event = current_site.child_sites.build(params[:site])
Run Code Online (Sandbox Code Playgroud)

current_site是一个返回当前站点对象的函数.

我收到此错误 -

#的未定义方法`entries'

rub*_*ish 13

您可以尝试将关系定义更改为以下内容:

has_many :child_sites, :class_name => 'Site', :cyclic => true
belongs_to :parent_site, :class_name => 'Site', :cyclic => true
Run Code Online (Sandbox Code Playgroud)

我不确切知道它的作用,但我记得在Mongoid google小组中讨论过它.如果这不起作用,您应该尝试inverse_of在两个关系宏上设置.大部分时间设置inverse_of正确完成工作.

has_many :child_sites, :class_name => 'Site', :inverse_of => :parent_site
belongs_to :parent_site, :class_name => 'Site', :inverse_of => :child_sites
Run Code Online (Sandbox Code Playgroud)

关于额外的查询,是的,每当您想要获取站点的child_sites或站点的父站点时,都会有额外的查询.

您应该考虑在父站点中嵌入子站点,但请记住,您将无法以stand_alone方式查询子站点.您始终必须以"parent_site> child_sites"的形式访问任何子站点.

还要记住文档大小的16MB限制,这是很难达到的,但如果父母有很多子站点,并且如果你在文档中存储模板信息,如html,css等,则可能是这样.本身.