Rails 请问如何写成下面这个 json 的 API?

Runable · 2018年08月07日 · 最后由 coderliu 回复于 2018年08月07日 · 1419 次阅读

下面是数据库的图片和要怎么写成下面的 json 的 API

data: 
    id: 1,
    product_category: "坐具",
    item:[
        product_name=椅子,
        product_name=沙发,
        ],
            id:2,
    product_category: "桌子",
    item:[
        product_name="书桌"
        product_name="案几",
        product_name="茶几",
        product_name="餐桌",

        ],
}

看看这两个 gem grape 和 active_model_serializers

by 回复

class Category < ApplicationRecord

has_many :products has_many :categories, class_name: "Category", foreign_key: "parent_category_id" belongs_to :parent_category, class_name: "Category"

end

by 回复

请问一下这个应该这么做,想了好几天了

Runable 回复

你去看 active_model_serializers 上面有相关的文档说明

@categories = Category.all
result = { 
  data: @categories.map do |category|
    {
      id: category.id,
      product_category: category.product_category,
      item: category.products.map do |sub_category|
        { product_name: sub_category.product_category }
      end
    }
  end
}
render json: result

不用 AMS 或者 JBuilder 的话可以这样。理解了这个 map 怎么写,AMS 用起来也就不难了

coderliu 回复

非常感谢

Runable 回复

5 楼贴的代码只是依据你贴的格式最直观的生成方式,易于理解但是性能上不理想,在循环里有数据库查询,真要这么用最好加个缓存,性能上比较理想的实现还是一次性都取出来再构建 JSON

需要 登录 后方可回复, 如果你还没有账号请 注册新账号