2010-12-12 24 views
1

我想连接树表并访问所有表中的数据,而不仅仅是一个。从Rails 3中的连接查询中的所有表中获取数据

这三个表格被称为:Page,Text,Image。

我试着用这一点,但没有奏效:

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

的主要原因之一是网页,其中的has_many文本和图像。我想做一个查询,并从一个查询中获取所有数据。 Rails 3中可能如何?我无法在任何地方找到一个好榜样,甚至在官方指南中也没有。

更新

之所以这样做,而不是@ page.texts和@ page.images这是因为我就只能在“块”打印出来。我想在打印时混合文本和图像。

+0

你的三个表是通过模型相关的,你们之间是否有联系? – 2010-12-12 00:23:20

+0

是的,在页面中我得到了“has_many:text,:images”,在文本和图片中我得到了belongs_to:page。 – 2010-12-12 00:26:15

回答

2

也许你可以让文字和一个新的'页面元素'的图像子类,所以你可以建立o页面元素和页面之间的关系。

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

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

+0

是的,这工作正常,但我需要在一个查询中得到它的原因是,我可以在打印时订购物品。如果我使用@ page.images和@ page.texts,我只能将它们放在“块”中,而不要混淆。 – 2010-12-12 00:41:25

+0

谢谢!但我认为这不会对我有帮助。我无法弄清楚为什么没有这方面的文件。我只想在一个查询中获取属于页面的所有文本和图像,并能够按创建顺序显示它们。把它们混合起来,这样可能会有一个文本块,然后是一个图像,另一个是文本块。这不可能吗? Codeigniter(PHP)很简单。 – 2010-12-12 01:06:17

相关问题