rails上的ruby-ActiveRecord:另一个Has_many中的Has_many-带rails3



所以我正在建立一个页面、应用程序和应用程序内容的系统。其中,页面具有_many:app_instances,而app_instances具有_many:app_contents。

我有模型:页面,应用程序,app_instance,app_content

在我的模型中:

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 = Page.includes(:app_instances).find(params[:id])

我可以成功调试@page.app_instances,但一旦我说@page.app.instances.app_contents,我就会收到一个错误。我猜这只是因为我错过了include中的include,但不确定我是如何写的,甚至不确定这是否是的"好做法">

我知道我可能会做:

has_many :app_contents, :through => :app_instances

但我宁愿让对象与包含内容的实例一起组织(这很有意义,对吧?(。。。这样我就可以循环浏览所有实例,并打印出实例的内容

我的数据库体系结构有意义吗?还是我走错了方向

Joel

您可以使用包含嵌套

Page.includes(:app_instances=>[:app_contents])

但您出现错误的主要原因是,在@page.app_instances.app_contents中page.app_instances没有任何app_contents。您将寻找@page 的所有app_instancesapp_contents的并集

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

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

在模型中定义page has many app_contents through app_instances关系。

第一种情况是为每个app_instances运行query,但是使用includes时,正如我前面提到的,这将导致单个查询。第二种情况将导致单个联接查询联接app_contents、app_instances表

相关内容

  • 没有找到相关文章

最新更新