Ruby on rails 3 在Rails 3中从联接查询中的所有表获取数据

Ruby on rails 3 在Rails 3中从联接查询中的所有表获取数据,ruby-on-rails-3,join,Ruby On Rails 3,Join,我想连接树表,并访问所有表中的数据,而不仅仅是一个表中的数据 这三个表被称为:页面、文本、图像 我尝试过这个,但没有成功: @texts = Page.joins([:texts, :images]).where(['pages.id = ?', @page]) 最主要的是有很多文本和图像的页面。我想做一个查询,并在一个查询中从所有这些数据中获取数据。在Rails 3中,这怎么可能呢?我在任何地方都找不到好的例子,甚至在官方指南中也找不到 更新 这样做而不是@page.text和@page.i

我想连接树表,并访问所有表中的数据,而不仅仅是一个表中的数据

这三个表被称为:页面、文本、图像

我尝试过这个,但没有成功:

@texts = Page.joins([:texts, :images]).where(['pages.id = ?', @page])
最主要的是有很多文本和图像的页面。我想做一个查询,并在一个查询中从所有这些数据中获取数据。在Rails 3中,这怎么可能呢?我在任何地方都找不到好的例子,甚至在官方指南中也找不到

更新


这样做而不是@page.text和@page.images的原因是我只能以“块”的形式打印它们。我想在打印时混合文本和图像。

这值得一读,有助于解决您的问题:


这值得一读,有助于解决您的问题:

有几件事:

  • 查看此页面以获取有关联接的帮助。请注意:include选项,它允许您出于性能考虑在查询中获取所有数据。您仍然需要通过ActiveRecord访问它(见下文)

  • 您是否需要将所有数据放在一个巨大的哈希/数组中?如果设置了关联,您只需执行以下操作:

    @text=@page.text
    @images=@page.images

编辑:这个怎么样

@pages = Page.all(:include => [:texts, :images])
@pages.sort!{|a,b| a.texts.count <=> b.texts.count}
@pages=Page.all(:include=>[:文本,:图像])
@页面。排序!{| a,b | a.text.count b.text.count}
文档:

有几件事:

  • 查看此页面以获取有关联接的帮助。请注意:include选项,它允许您出于性能考虑在查询中获取所有数据。您仍然需要通过ActiveRecord访问它(见下文)

  • 您是否需要将所有数据放在一个巨大的哈希/数组中?如果设置了关联,您只需执行以下操作:

    @text=@page.text
    @images=@page.images

编辑:这个怎么样

@pages = Page.all(:include => [:texts, :images])
@pages.sort!{|a,b| a.texts.count <=> b.texts.count}
@pages=Page.all(:include=>[:文本,:图像])
@页面。排序!{| a,b | a.text.count b.text.count}

文档:

也许您可以创建新“页面元素”的文本和图像子类,以便在页面元素和页面之间建立一种关系


另一方面,您可以使用
Page.join(:text)。选择('text.*')
并检索文本表中的列作为页面对象的虚拟列(您可以有一个页面对象,其中只有其他表字段的虚拟列,因此此解决方案可能会变脏).

也许您可以创建新“页面元素”的文本和图像子类,以便在页面元素和页面之间建立一种关系


另一方面,您可以使用
Page.join(:text)。选择('text.*')
并检索文本表中的列作为页面对象的虚拟列(您可以有一个页面对象,其中只有其他表字段的虚拟列,因此此解决方案可能会变脏)。

您的三个表是否通过模型相关,您是否在它们之间设置了关联?是的,在我的页面中有“has\u many:text,:images”,在我获得的文本和图像中,它们属于:Page。您的三个表是否通过模型相关,您是否在它们之间设置了关联?是的,在我的页面中有“has\u many:text,:images”在我得到的文本和图像中,我属于:页面。我已经阅读了它,但我无法让代码正常工作。如果你知道怎么做,请帮忙!我已经读过了,但无论如何我都无法让代码正常工作。如果你知道怎么做,请帮忙!是的,这很好,但我需要在一个查询中获得它的原因是,这样我可以在打印时订购商品。如果我使用@page.images和@page.text,我只能在“块”中获取它们,而不能将它们混淆。谢谢!但我认为这对我没有帮助。我不明白为什么没有这方面的文件。我只想在一个查询中获得属于页面的所有文本和图像,并能够按创建顺序显示它们。将它们混合在一起,这样可能会有一个文本块后跟一个图像,然后是另一个文本块。这不可能吗?这在Codeigniter(PHP)中很简单。是的,这很好,但我需要在一个查询中获得它的原因是,这样我可以在打印时订购项目。如果我使用@page.images和@page.text,我只能在“块”中获取它们,而不能将它们混淆。谢谢!但我认为这对我没有帮助。我不明白为什么没有这方面的文件。我只想在一个查询中获得属于页面的所有文本和图像,并能够按创建顺序显示它们。将它们混合在一起,这样可能会有一个文本块后跟一个图像,然后是另一个文本块。这不可能吗?它在Codeigniter(PHP)中很简单。