2010-12-12 26 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

相關問題