Ruby on rails ActiveRecord:Has_many在另一个Has_many中-使用rails3
因此,我正在建立一个由页面、应用程序和应用程序内容组成的系统。其中一个页面有多个:app\u实例,而app\u实例有多个:app\u内容 我有模型: 页面,应用程序,应用程序实例,应用程序内容 在我的模型中: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 <
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!