首页 > 解决方案 > 使用 Grape 将数组中的多个对象组合为 json

问题描述

我在我的 Rails 应用程序中使用了葡萄宝石。返回单个记录时,我可以使用葡萄主动模型序列化程序。返回多个对象时,我遇到了未定义的错误。我应该如何构建我的多个活动记录?

应用程序/控制器/api/v1/campaigns.rb

返回多条记录

  resource :campaigns do

    desc "Return all campaigns"
    get "", root: :campaigns do
        @campaign_array = []
        @campaigns = Campaign.all
        @campaigns.each do |campaign|
            @campaign_array << {
              backers: campaign.orders.count,
              funded: campaign.orders.completed.sum(:quantity),
              campaign: campaign
            }
        end
        @campaign_array
    end
  end

输出 - 错误

undefined method `read_attribute_for_serialization'

返回单个记录

    desc "Return a campaign"
    get ":id", root: :campaign do

        @campaign = Campaign.where(id: permitted_params[:id]).first!
        {
          backers: @campaign.orders.count,
          funded: @campaign.orders.completed.sum(:quantity),
          campaign: @campaign
        }
    end

输出

{
    "backers": 1,
    "funded": 2,
    "campaign": {
        "id": 5,
        "min_funding_goal_units": 20,
        "product_name": "Another product",
        "product_description": "A product description",
    }
}

标签: ruby-on-railsgrape

解决方案


当它是一个项目数组时,您需要使用 each_serializer 而不是序列化器

github上有一个关于这个问题的问题。相关问题


推荐阅读