WITH Queries by ActiveRecord::QueryMethods And Return Active



我正在使用 select in 和查询find_by_sql

scope :error_percentage, -> (user_obj) {
find_by_sql("WITH products_boost_sum AS (SELECT *, (CASE WHEN (city_id =#{user_obj.user.city_id || -1}) THEN 1 ELSE 0 END) + (CASE WHEN (country_id =#{user_obj.country_id || -1}) THEN 1 ELSE 0 END) AS boost_sum FROM products) SELECT *, (CASE WHEN boost_sum = 2 THEN 2 ELSE 0 END) AS error_percentage FROM products_boost_sum")
}

问题 此范围由其他范围使用。所以我需要返回Active_Relation对象而不是数组。 我检查了 ActiveRecord 的 QueryMethods,但找不到with查询的方法。

如何使用with查询返回活动关系对象? 如果没有查询方法,select方法是否可用?

Active Record 不支持开箱即用的 CTE 查询,但有一个 gem 可以添加 https://github.com/DavyJonesLocker/postgres_ext 支持。

然后你可以做这样的查询

Score.with(my_games: Game.where(id: 1)).joins('JOIN my_games ON scores.game_id = my_games.id')

最新更新