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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ActiveRecord的查询:: QueryMethods并返回ActiveRecord_Relation rails相关的知识,希望对你有一定的参考价值。

我正在使用select in withfind_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 Query的方法。

如何使用with Query返回ActiveRelation对象?如果没有queryMethod,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')

以上是关于使用ActiveRecord的查询:: QueryMethods并返回ActiveRecord_Relation rails的主要内容,如果未能解决你的问题,请参考以下文章

Yii2.0ActiveRecord嵌套子查询(AR子查询)

ruby 如何将ActiveRecord范围委托给Query对象

Rails 中的原始数据库查询

Ruby On Rails 5,activerecord query其中模型关联id包括数组中的所有id

TP sql语句

Codeigniter:$query->free_result() 使用活动记录时?