2013-11-28 30 views
0

我有3個型號。 Table1屬於Table2Table2屬於Table3外部加入軌道中的3個表格

我想要得到一個ActiveRecord::Relation,其中包括所有3個表中的所有字段,包括空值(外部連接以獲取所有Table1),Table1上的WHERE子句和Table3中的列的順序。

我想在SQL是什麼:

SELECT * FROM Table1 LEFT OUTER JOIN Table2 ON Table2.id = Table1.table2_id 
        LEFT OUTER JOIN Table3 ON Table3.id = Table2.table3_id 
WHERE Table1.column1 = "example" 
ORDER BY Table3.table3_column 

不過,我一直在努力了幾個小時,現在做到這一點的軌道還是一無所獲。可能嗎?

@records = Table1.joins(:table2).joins(:table3).where(:column1 => "example").order("table3_column") 

(例如),因爲它正在尋找表1和表3之間的聯繫,除了通過表2以外,它不存在。我需要加入一次,然後加入。更何況這是一個內部連接。我試過的形式:

@records = Table1.joins("LEFT OUTER JOIN Table2 ON Table2.id = Table1.table2_id LEFT OUTER JOIN Table3 ON Table3.id = Table2.table3_id") 

但是我得到零。

感謝您的任何幫助。

+0

只需使用的find_by_sql? – davidfurber

回答

0

嘗試find_by_sql

Table1.find_by_sql("SELECT * FROM Table1 
LEFT OUTER JOIN Table2 ON Table2.id = Table1.table2_id 
LEFT OUTER JOIN Table3 ON Table3.id = Table2.table3_id 
WHERE Table1.column1 = "example" 
ORDER BY Table3.table3_column") 

參考find by sql