JSON rendering with activemodel serializer in Rails

给你一囗甜甜゛ 提交于 2019-12-29 07:48:07

问题


I just wonder how the rails render the model objects with activemodel-serializer in JSON. I installed activemodel-serializer but the output is something different.

The ideal is something like:

"products": [
  {
    "id": 1,
    "title": "Digital Portable System",

  },
  {
    "id": 2,
    "title": "Plasma TV",
  }

]

However what I got so far is;

My code is simple;

class Api::V1::ProductsController < ApplicationController
  before_action :authenticate_with_token!, only: [:create, :update, :destroy]
  respond_to :json

  def index
    respond_with Product.all  
  end

  def show
    respond_with Product.find(params[:id])   
  end

  def create
    product = current_user.products.build(product_params) 
    if product.save
      render json: product, status: 201, location: [:api, product] 
    else
      render json: { errors: product.errors }, status: 422
    end
  end

  def update
    product = current_user.products.find(params[:id])
    if product.update(product_params)
      render json: product, status: 200, location: [:api, product] 
    else
      render json: { errors: product.errors }, status: 422
    end
  end

  def destroy
    product = current_user.products.find(params[:id]) 
    product.destroy
    head 204
  end

  private

    def product_params
      params.require(:product).permit(:title, :price, :published) 
    end

end

回答1:


Product Controller

def index
   render json: Product.all, each_serializer: ProductsSerializer, root: false
end

Product Serializer - app/serializers/products_serializer.rb

class ProductsSerializer < ActiveModel::Serializer
  attributes :id, :title

end



回答2:


def index
   render json: Product.all, only: [:id, :title]
end


来源:https://stackoverflow.com/questions/40835437/json-rendering-with-activemodel-serializer-in-rails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!