我是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等,则可能是这样.本身.