Ruby on rails ActiveRecord:Has_many在另一个Has_many中-使用rails3

Ruby on rails ActiveRecord:Has_many在另一个Has_many中-使用rails3,ruby-on-rails,ruby-on-rails-3,activerecord,has-many,Ruby On Rails,Ruby On Rails 3,Activerecord,Has Many,因此,我正在建立一个由页面、应用程序和应用程序内容组成的系统。其中一个页面有多个:app\u实例,而app\u实例有多个:app\u内容 我有模型: 页面,应用程序,应用程序实例,应用程序内容 在我的模型中: class Page < ActiveRecord::Base has_many :app_instances end class App < ActiveRecord::Base belongs_to :page end class AppInstance <

因此,我正在建立一个由页面、应用程序和应用程序内容组成的系统。其中一个页面有多个:app\u实例,而app\u实例有多个:app\u内容

我有模型: 页面,应用程序,应用程序实例,应用程序内容

在我的模型中:

class Page < ActiveRecord::Base
  has_many :app_instances
end

class App < ActiveRecord::Base
  belongs_to :page
end

class AppInstance < ActiveRecord::Base
  belongs_to :page
  belongs_to :app
  has_many :app_contents
end

class AppContent < ActiveRecord::Base
  belongs_to :app_instance
  belongs_to :app
end
我可以成功地调试@page.app_实例,但只要我说@page.app_instances.app_内容,我就会得到一个错误。我猜这只是因为我在include中遗漏了include,但不确定我是如何写的,甚至不知道这是否是“良好实践”

我知道我可能会:

has_many :app_contents, :through => :app_instances
但是我宁愿让对象与包含内容的实例一起组织(这是有意义的,对吧?)。。。因此,我可以循环遍历所有实例,并打印出实例的内容

我的数据库架构有意义吗?还是我走错了路


Joel

您可以使用以下方法包括嵌套:

Page.includes(:app_instances=>[:app_contents])
但出现错误的主要原因是,在
@page.app\u instances.app\u contents
page.app\u实例没有任何
app\u内容
。您将寻找所有
app\u实例的
app\u内容的联合体
@page

因此,可以通过以下方式完成:

@page.app_instances.app_contents.each{|ai| (list || =[]) << ai.app_contents}
list.flatten!

@page.app|instances.app|contents.每个{| ai|(list | |=[])是的..它定义了页面和app|u内容的最佳关系,查询实际上得到了更好的优化。。
@page.app_instances.app_contents.each{|ai| (list || =[]) << ai.app_contents}
list.flatten!