ActiveModelSerializer,如何获得有关该关联的JSON API响应的更多信息?

时间:2016-03-03 22:42:04

标签: ruby-on-rails active-model-serializers json-api

我正在使用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响应的关系部分中获取用户名?

1 个答案:

答案 0 :(得分:0)

您需要在RentalUnitsController中.includes(:user)方法的第一行向查询添加index,因此:

@rental_units = RentalUnit.includes(:user).all

这会将:user关系的目标对象的实际数据添加到RentalUnit对象和序列化的JSON中。