1

我正在使用select in with query by 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_RelationObject 而不是数组。我检查了ActiveRecord 的QueryMethods,但找不到withQuery 的方法。

如何使用withQuery 返回 ActiveRelation 对象?如果没有它的 queryMethod,那么selectMethod 是否可用?

4

1 回答 1

0

开箱即用的 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')
于 2017-12-20T04:27:46.293 回答