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

任何有关我如何从AB的帮助将不胜感激。

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 回答