С запросами по ActiveRecord::QueryMethods и возвращают рельсы ActiveRecord_Relation

Я использую выберите в с запросом по 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 Объект не массив. Я проверил QueryMethods ActiveRecord, но я не могу найти метод для with Запрос.

Как я могу использовать with Запрос на возврат объекта ActiveRelation? Если для него нет метода запроса, это доступно select Метод?

1 ответ

Запросы CTE не поддерживаются Active Record из коробки, но есть гем, который добавляет поддержку 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')
Другие вопросы по тегам