带有find_by_sql的ActiveRecord:来自连接表中的字段的顺序

时间:2014-12-17 09:54:18

标签: ruby-on-rails postgresql activerecord

我有一个模型MobileApp,我使用find_by_sql来执行带有多个INNER JOIN的复杂SQL查询。 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 ID。

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]

有更好的方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

satisfaction_scores.id移除SELECT后,MobileApp返回的find_by_sql ID是正确的。除了satisfaction_scores.id列对查询不是必不可少的。