2011-04-13 14 views
10

Aynı anda diğer alanları seçerken tek bir gruba çoklu toplamları() bağlamak istiyorum. ActiveRecord yöntemlerini, daha sonra devralınan ActiveRecord sınıflarının davranışını değiştirebileceğinden, el ile bir sql dizesi oluşturmak yerine bunu yapmak için kullanmayı tercih ederim.Raylarda ActiveRecord'da birden fazla toplam() s

LineItem.select(:user_id).group(:user_id).sum(:cost).sum(:quantity) 

sebebi ek grup buralara ekleyebilir olma ve Halbuki:

Mesela ben böyle bir şeyle (örnek olarak) deyimi temsil etmek

select user_id, sum(cost) as total_cost, sum(quantity) as total_quantity from line_items group by user_id 

istiyorum Tüm tutarların ortak olacağı daha sonraki cümleleri.

require "active_record" 
require "logger" 

ActiveRecord::Base.logger = Logger.new(STDOUT) 
ActiveRecord::Base.establish_connection :adapter => "postgresql", :database => "francois" 

ActiveRecord::Base.connection.execute "DROP TABLE IF EXISTS values" 
ActiveRecord::Base.connection.execute "CREATE TABLE values(user_id INTEGER NOT NULL, quantity INTEGER NOT NULL DEFAULT 1, cost INTEGER NOT NULL DEFAULT 2)" 

class Value < ActiveRecord::Base 
end 

2.times do 
    5.times do |n| 
    Value.create!(:user_id => n) 
    end 
end 

Value.group(:user_id).select('user_id, SUM(cost) AS total_cost, SUM(quantity) AS total_quantity').each do |value| 
    p [value.user_id, value.total_quantity, value.total_cost] 
end 

Ben sum(:cost, :quantity) çalıştı, ancak #sum bu şekilde tanımlanan parametrelerle beklemediğini:

cevap

19

Bu benim için çalışıyor. sum(:cost => :total_cost, :quantity => :total_quantity)'u da denedim.