使用ActiveRecord的查询:: QueryMethods并返回ActiveRecord_Relation rails

时间:2017-07-31 08:31:52

标签: ruby-on-rails postgresql activerecord active-relation

我正在find_by_sql使用select in with查询:

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 Query的方法。

如何使用with查询返回ActiveRelation对象? 如果没有queryMethod,select方法可以使用它吗?

1 个答案:

答案 0 :(得分: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')