У меня есть модель MobileApp, и я использую find_by_sql
для выполнения сложного SQL-запроса с несколькими INNER JOIN
. Запрос SQL является следующее:ActiveRecord с find_by_sql: упорядочить по полю из объединенной таблицы
SELECT DISTINCT mobile_apps.*, satisfaction_scores.id, satisfaction_scores.score FROM mobile_apps
INNER JOIN bucket_applications ON mobile_apps.id = bucket_applications.mobile_app_id
INNER JOIN satisfaction_scores ON mobile_apps.id = satisfaction_scores.mobile_app_id
WHERE NOT EXISTS
(SELECT * FROM feeds
WHERE feeds.mobile_app_id = mobile_apps.id
AND feeds.target_id = 41
AND feeds.left IS TRUE) ORDER BY satisfaction_scores.score DESC;
И я делаю MobileApp.find_by_sql(<the_query>)
.
Моя проблема в том, что мне нужно отсортировать мой MobileApp
по счету SatisfactionScore
. Следовательно, мне нужно добавить в поле SELECT
поле score
, чтобы иметь ORDER BY
, работающий со счетом. Я думаю, что SQL-запрос прав, но ActiveRecord не любит иметь в столбцах SELECT
не из таблицы mobile_apps
и поэтому возвращает неверные идентификаторы MobileApp
.
MobileApp.find_by_sql(<the_query>) =>
[#<MobileApp id: 41>,
#<MobileApp id: 42>,
#<MobileApp id: 43>,
#<MobileApp id: 44>]
Но
MobileApp.ids => [153, 156, 159, 162, 165]
Есть ли лучший способ сделать это?
Спасибо.