2013-11-28 9 views
0

У меня есть 3 модели. Table1 принадлежит к Table2, а Table2 принадлежит к Table3.Outer Join 3 Tables in Rails

Я хочу получить ActiveRecord::Relation, который включает в себя все поля из всех трех таблиц, включая нули (внешнее соединение для получения всей таблицы 1), с предложением WHERE в таблице 1 и порядком столбца в таблице 3.

То, что я хочу в 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") 

(Например), никуда не ведет, потому что он ищет связь между Table1 и Table3, который не существует, кроме как через Table2. Мне нужно присоединиться один раз, а затем присоединиться к этому. Не говоря уже о том, что это внутреннее соединение. Я пробовал форму:

@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