0

Rails アプリケーションには次のモデルがあります。

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}]

AからBに移動する方法についての助けをいただければ幸いです。

4

2 に答える 2

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
于 2013-02-20T12:02:25.347 に答える
0

JSON シリアル化を頻繁に行っている場合は、ActiveModelSerializers を参照することをお勧めします: https://github.com/rails-api/active_model_serializers

于 2013-02-20T11:51:38.260 に答える