У меня есть 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")
Но я получаю от этого ничего.
Спасибо за любую помощь в этом.
Просто используйте find_by_sql? – davidfurber