JSON 在 Rails 中使用 activemodel 序列化器渲染
JSON rendering with activemodel serializer in Rails
我只是想知道 rails 如何在 JSON 中使用 activemodel-serializer 渲染模型对象。
我安装了 activemodel-serializer 但输出有些不同。
理想状态是这样的:
"products": [
{
"id": 1,
"title": "Digital Portable System",
},
{
"id": 2,
"title": "Plasma TV",
}
]
但是到目前为止我得到的是;
我的代码很简单;
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
产品负责人
def index
render json: Product.all, each_serializer: ProductsSerializer, root: false
end
产品序列化程序 - app/serializers/products_serializer.rb
class ProductsSerializer < ActiveModel::Serializer
attributes :id, :title
end
def index
render json: Product.all, only: [:id, :title]
end
我只是想知道 rails 如何在 JSON 中使用 activemodel-serializer 渲染模型对象。 我安装了 activemodel-serializer 但输出有些不同。
理想状态是这样的:
"products": [
{
"id": 1,
"title": "Digital Portable System",
},
{
"id": 2,
"title": "Plasma TV",
}
]
但是到目前为止我得到的是;
我的代码很简单;
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
产品负责人
def index
render json: Product.all, each_serializer: ProductsSerializer, root: false
end
产品序列化程序 - app/serializers/products_serializer.rb
class ProductsSerializer < ActiveModel::Serializer
attributes :id, :title
end
def index
render json: Product.all, only: [:id, :title]
end