2017-01-04 2 views
0

У меня есть запрос, который работает так, как я хочу, выполняя SQL напрямую, но любопытно (только для моих собственных целей обучения), если это то же самое можно сделать в инструкции ActiveRecord?Rails 5 эквивалент для этого сложного SQL-запроса?

Часть, с которой я изо всех сил стараюсь, является частью COALESCE этого запроса, которая просто гарантирует, что любые значения NULL из LEFT JOIN считаются нулями вместо этого, чтобы сохранить суммирование по порядку.

Любые идеи? Я использую Postgres.

SELECT Inventories.id, Inventories.name, Inventories.unit_of_measure, 
    COALESCE(Sum(Stocks.count),0) as totalcount 
    FROM Inventories 
    LEFT JOIN Stocks 
    ON Inventories.id = Stocks.inventory_id 
    WHERE Inventories.property = 'material' AND Inventories.organization_id = #{current_organization.id} 
    GROUP BY Inventories.id, Stocks.inventory_id 
    ORDER BY totalcount ASC 
    LIMIT(5)") 

Это ближайший я получил для эквивалента AR. Когда я пытаюсь добавить сумму или что-то в этом роде, вот когда она ошибается.

@lowmaterials = current_organization.inventories.materials.left_joins(:stocks).group(:id, :inventory_id).order(count: :asc).limit(5) 

ответ

0

Вы можете использовать ActiveRecord::QueryMethods#select:

your_relation.select("column1, column2, COALESCE(1,2) AS column3").left_joins... 
+0

Awesome, спасибо - не понял, что это было возможно, и поэтому теперь я узнал кое-что. :) – PDD