【发布时间】:2017-11-01 01:14:45
【问题描述】:
我在 Stackoverflow 上没有找到完全相同的问题。除了 AMS 变化如此之快,甚至 2 年前的答案也经常过时。
我只使用 Rails 5 API 和 gem 'active_model_serializers' (AMS)(版本 0.10.6)。
我也使用 JSONAPI 响应格式 - 而不仅仅是 JSON。
我需要渲染一个嵌套的包含——现在不仅仅是嵌套关系。
代码示例:
序列化器1:
class QuestionSerializer < ActiveModel::Serializer
attributes :id, :title, :created_at, :updated_at
belongs_to :user
end
序列化器2:
class UserSerializer < ActiveModel::Serializer
attributes :id, :email
has_many :cities
end
序列化器3:
class CitySerializer < ActiveModel::Serializer
attributes :id, :name
end
控制器:
def index
@questions = Question.all
render json: @questions, include: [:user, 'user.city']
end
我收到此回复:
{
"data": [
{
"id": "1",
"type": "questions",
"attributes": {
"title": "First",
"created-at": "2017-03-27T13:22:15.548Z",
"updated-at": "2017-03-27T13:22:16.463Z"
},
"relationships": {
"user": {
"data": {
"id": "3",
"type": "users"
}
}
}
}
],
"included": [
{
"id": "3",
"type": "users",
"attributes": {
"email": "client2@example.com"
},
"relationships": {
"cities": {
"data": [
{
"id": "75",
"type": "cities"
}
]
}
}
}
]
}
我确实得到了一个嵌套关系city。我什至得到了城市id。
但问题是 - 我如何获得其他 city 属性,例如 name?我需要另一个 include 部分 - 可能在当前 include 部分内(嵌套?)。
如何做到这一点? (没有任何额外的宝石)
【问题讨论】:
标签: ruby-on-rails active-model-serializers json-api