2011-04-13 20 views
10

मैं एक ही समय में अन्य फ़ील्ड का चयन करते समय एकाधिक समूह() को एक समूह में लिंक करना चाहता हूं। मैं मैन्युअल रूप से एक एसक्यूएल स्ट्रिंग बनाने के बजाय ActiveRecord विधियों का उपयोग करना पसंद करूंगा, क्योंकि मैं बाद में ActiveRecord के विरासत कक्षाओं के व्यवहार को संशोधित कर सकता हूं।Rails में ActiveRecord में एकाधिक योग() s

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

कारण मैं अतिरिक्त समूह सारांश जोड़ सकते हैं किया जा रहा है और where-:

उदाहरण के लिए मैं की तरह कुछ के साथ बयान का प्रतिनिधित्व करने के (एक उदाहरण के रूप में) करना चाहते हैं

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

बाद में खंड, जो सभी रकम आम हैं।

उत्तर

19

यह मेरे लिए काम करता है:

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 

मैं sum(:cost, :quantity) कोशिश की, लेकिन #sum इस तरह से परिभाषित तर्क की उम्मीद नहीं है। मैंने sum(:cost => :total_cost, :quantity => :total_quantity) भी कोशिश नहीं की, इसका कोई फायदा नहीं हुआ।

संबंधित मुद्दे