Мой последний пост был о лучшем способе написания SQL-запроса с условиями на LEFT OUTER JOIN:
ВЛЕВО НАРУЖНОЕ СОЕДИНИТЬ с условиями (где, по заказу)?
Теперь мне нужно преобразовать этот хороший кусок SQL в полезный Active Record Query (Rails 3). ; -)
У меня есть 2 модели:
Обучение has_many: training_histories
История обучения принадлежит_: обучение
Как мне написать область видимости, чтобы получить результаты, полученные SQL ниже?
SELECT tc.id, tc.name, tc.order,
th.id as history_id, th.finished_at, th.score
FROM trainings tc
LEFT OUTER JOIN training_histories th ON th.training_id = tc.id
and th.id =
(SELECT th1.id from training_histories th1 where th1.training_id = tc.id
and th1.finished_at is not null
order by th1.finished_at desc limit 1)
WHERE tc.id > 4
AND tc.id < 8
GROUP BY tc.id
ORDER BY tc.order_by ASC, tc.id ASC
Я хочу получить все записи TRAININGS и добавить последнюю действительную (или законченную) связанную запись TRAINING_HISTORIES.
Есть предложения?
Спасибо