什么时候放弃积极的记录?

hol*_*den 2 ruby sql activerecord ruby-on-rails

我不是Rails的新手,但到目前为止我还没有做过这么复杂的事情,所以我很好奇一个更有经验的rails开发者可能分享的内容:

我有一个SQL查询,它将4个左右的表连接到一个输出中:

SELECT places.id, places.name, places.email, places.website, places.blurb, external_ratings.rating, photos.data_file_name
    FROM `scannables` 
    INNER JOIN places ON scannables.place_id = places.id
    INNER JOIN locations ON places.location_id = locations.id
    LEFT JOIN external_ratings ON scannables.place_id = external_ratings.place_id
    LEFT JOIN photos ON scannables.place_id = photos.place_id
    WHERE locations.id = 2474 AND scannables.bookdate BETWEEN '2009-08-29' and date_add('2009-08-29', INTERVAL 4 DAY)
    GROUP BY scannables.place_id
    HAVING SUM(scannables.available) >= 4
    ORDER BY SUM(scannables.available) DESC, external_ratings.rating DESC
Run Code Online (Sandbox Code Playgroud)

我拥有在各种模型中定义的所有表关系,并且最初只使用这些定义的关系(使用活动记录)来提取各种数据,并且它工作正常,除了主要查询,最大的是非常慢,执行多个indv.查询.我的问题是,我应该在这种情况下转储Active Record并使用find_by_sql ......还是我错过了什么?

什么是Rails方式?

谢谢

jdl*_*jdl 11

务实而不是担心维持"Rails纯度"更为重要.我喜欢命名的范围,关联以及与之相关的所有魔法.当然,我更喜欢那些运行原始SQL查询.但是,如果一个复杂的查询调用find_by_sql,那么我将使用它而不会失去任何睡眠.

如果您需要支持多个数据库,那么您可能希望将其转变为纯粹的Rails方法,但这种要求非常少见.