Toshi Toshi - 7 days ago 6
JSON Question

JSON rendering with activemodel serializer in Rails

I just wonder how the rails render the model objects with activemodel serizlizer in JSON.
I installed activemodel serizlizer 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;
enter image description here

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

Answer

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
Comments