2013-02-20 2 views
0

나는 내 레일 응용 프로그램에서 다음과 같은 모델이 있습니다 내 컨트롤러에서레일 액티브 레코드 쿼리 및 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 (A)를 생산하고 :

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

그러나 내 목표는 이 (B는) :

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

은 내가 B에서 갈 수있는 방법에 어떤 도움을 크게 감상 할 수있다.

답변

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 : undefined method 'group_id'for [1, 2000] : Array' – diasks2

+0

당신이 원하는 테이블의 컬럼 이름으로'group_id'를 대체하십시오. –

+0

나는 그것을 바꿀 때 당신의 대답을 얻었다 :'list = value.map do | k, v | {: group_id => k, : 금액 => v } 끝 ' – diasks2

관련 문제