我想加入树表并访问所有表中的数据而不仅仅是一个表。
这三个表被称为:页面,文本,图像。
我试过这个,但它不起作用:
@texts = Page.joins([:texts, :images]).where(['pages.id = ?', @page])
主要是具有多种文本和图像的页面。我想进行查询并在一个查询中从所有这些数据中获取数据。如何在Rails 3中实现这一点?我无法在任何地方找到一个好的例子,甚至在官方指南中都没有。
更新
这样做而不是@ page.texts和@ page.images的原因是因为我只能在“块”中打印它们。我想在打印时混合文本和图像。
答案 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}
答案 2 :(得分:-1)
这值得一读,并将有助于解决您的问题: