从Rails 3中的连接查询中的所有表中获取数据

时间:2010-12-12 00:11:06

标签: ruby-on-rails-3 join

我想加入树表并访问所有表中的数据而不仅仅是一个表。

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

我试过这个,但它不起作用:

@texts = Page.joins([:texts, :images]).where(['pages.id = ?', @page])

主要是具有多种文本和图像的页面。我想进行查询并在一个查询中从所有这些数据中获取数据。如何在Rails 3中实现这一点?我无法在任何地方找到一个好的例子,甚至在官方指南中都没有。

更新

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

3 个答案:

答案 0 :(得分:2)

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

另一方面,您可以使用Page.join(:texts).select('texts.*')并将文本表中的列检索为Page对象的虚拟列(您可以将Page对象仅包含其他表字段的虚拟列,因此此解决方案可以变脏了。

答案 1 :(得分:0)

一些事情:

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

    http://www.railway.at/articles/2008/04/24/database-agnostic-database-ignorant/

  • 您是否需要一个巨型哈希/数组中的所有数据?如果你有关联设置,你可以简单地做:

    @texts = @page.texts@images= @page.images

修改:这个怎么样

@pages = Page.all(:include => [:texts, :images])
@pages.sort!{|a,b| a.texts.count <=> b.texts.count}

文档:http://ruby-doc.org/core/classes/Array.html#M002186

答案 2 :(得分:-1)

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

http://guides.rubyonrails.org/association_basics.html