Ошибка, которую вы получаете, заключается в том, что вы не используете предложение group by.
В mysql и большинстве баз данных, если вы хотите использовать суммирование (или любую группу по столбцу) в выборе, чем вы используете предложение HAVING, а не предложение WHERE
PurchasePosition.where(:purchase_order_id => 996).having('sum(pallet_purchase_position_assignments.quantity) < purchase_positions.quantity').includes(:pallet_purchase_position_assignments).sum("pallet_purchase_position_assignments.quantity
Например, если у меня есть таблица типа:
create_table "leaders", :force => true do |t|
t.integer "leaderable_id"
t.string "leaderable_type"
t.integer "county_id"
t.integer "us_state_id"
t.integer "recruits"
t.integer "hours"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "last_run_dt"
end
Тогда я могу создать запрос, подобный этому
Leader.having("sum(hours) > 150").group(:leaderable_type).sum(:hours)
Я не уверен, что у меня есть правильный синтаксис для вашего запроса, но вы должны быть в состоянии исправить его, используя предложение has и предложение group.