2013-02-20 143 views
0

我已经在我的Rails应用程序以下型号:Rails的活动记录查询和JSON

class Transaction 
    belongs_to :category 
    has_one :group, :through => :category 

class Category 
    belongs_to :group 
    has_many :transactions 

class Group 
    has_many :categories 
    has_many :transactions, :through => :category 

在我的控制器如下:

@transactions = Transaction.includes(:category, :group).group("groups.id").sum("amount") 
respond_to do |format| 
    format.json{ 
    render :json => JSON.generate(@transactions.as_json(:include => [:category, :group])) 
    } 
end 

这将产生以下JSON(一个) :

{"1":2000,"3":5000,"2":1000} 

但是,我的目标是生产类似这个():

[{"group_id":1,"amount":2000},{"group_id":3,"amount":5000},{"group_id":2,"amount":1000}] 

上我如何从一个任何帮助将不胜感激。

回答

1

尝试:

def user_transactions 
    @transactions = Transaction.includes(:category, :group).group("groups.id").sum("amount") 
    respond_to do |format| 
    format.html 
    format.json do 
     render :json => custom_json_for(@transactions) 
    end 
    end 
end 

private 
def custom_json_for(value) 
    list = value.map do |k,v| 
    { :group_id => k, 
     :amount=> v  
    } 
    end 
    list.to_json 
end 
+0

感谢您的帮助。但是,这给了我以下错误:'NoMethodError:[1,2000]的未定义方法'group_id':Array' – diasks2 2013-02-20 12:15:02

+0

用您希望的表的列名替换'group_id'。 – 2013-02-20 12:19:10

+0

如果我将其更改为:'list = value.map do | k,v | {:group_id => k, :amount => v } end' – diasks2 2013-02-20 12:32:33