我正在使用Rails 5和AMS 10.我的问题是粗体。
gem 'active_model_serializers', '~> 0.10.0.rc1'
rails -v
Rails 5.0.0.beta3
我正在使用JSON API规范。我在config / initializers / active_model_serializer.rb文件中有这个:
ActiveModel::Serializer.config.adapter = :json_api
是否要将约定应用于JSON API响应,这些响应可以完全自由地定制节点?这样可以更快地了解为类似前端Ember应用程序或移动原生应用程序使用API的开发人员的数据?
这是我的RentalUnitSerializer:
class RentalUnitSerializer < ActiveModel::Serializer
attributes :id, :rooms, :bathrooms, :price, :price_cents
belongs_to :user
end
这是我的UserSerializer:
class UserSerializer < ActiveModel::Serializer
attributes :id, :name, :email
def name
names = object.name.split(" ")
"#{names[0].first}. #{names[1]}"
end
end
这是我的rental_units_controller:
class RentalUnitsController < ApplicationController
before_action :set_rental_unit, only: [:show, :update, :destroy]
# GET /rental_units
def index
@rental_units = RentalUnit.all
render json: @rental_units
end
当我点击/ rental_units端点时,这是我的JSON响应。
{
"data": [{
"id": "1",
"type": "rental_units",
"attributes": {
"rooms": 2,
"bathrooms": 2,
"price": null,
"price_cents": 50000
},
"relationships": {
"user": {
"data": {
"id": "1",
"type": "users"
}
}
}
}, {
"id": "2",
"type": "rental_units",
"attributes": {
"rooms": 2,
"bathrooms": 2,
"price": null,
"price_cents": 50000
},
"relationships": {
"user": {
"data": {
"id": "1",
"type": "users"
}
}
}
},
如何在JSON API响应的关系部分中获取用户名?
答案 0 :(得分:0)
您需要在RentalUnitsController中.includes(:user)
方法的第一行向查询添加index
,因此:
@rental_units = RentalUnit.includes(:user).all
这会将:user
关系的目标对象的实际数据添加到RentalUnit对象和序列化的JSON中。