Ресурсы JSONAPI: сериализация модели с пространством имен

Я пытаюсь использовать ресурсы JSONAPI в движке Rails, и я определил DokiCore::Tenant (модель ) в doki_core/app/models/tenant.rb и DokiCore::TenantResource в doki_core/app/resources/tenant_resource.rb. Когда я пытаюсь сериализовать в хэш, я сталкиваюсь со следующей ошибкой:

NoMethodError: неопределенный метод tenant_path' for #<Module:0x007f9d04208778> from /Users/typeoneerror/.rvm/gems/ruby-2.2.2@doki/gems/jsonapi-resources-0.6.1/lib/jsonapi/link_builder.rb:77:inpublic_send'

Ресурс использует model_name, чтобы сообщить, где на самом деле находится модель:

module DokiCore
  class TenantResource < JSONAPI::Resource
    model_name 'DokiCore::Tenant'
    # ...
  end
end

Я пытаюсь вывести хэш для арендатора следующим образом:

tenant = DokiCore::Tenant.find(1); 
resource = DokiCore::TenantResource.new(tenant, nil); 
serializer = JSONAPI::ResourceSerializer.new(DokiCore::TenantResource); 
serializer.serialize_to_hash(resource);

где происходит ошибка.

Как заставить ссылки работать правильно и/или отключить их? Я предполагаю, что он добавляет URL-адрес к ресурсу в виде ссылки под ключом «ссылки» в выводимом json.


person typeoneerror    schedule 26.10.2015    source источник


Ответы (2)


Разобрался с этим. Если ваши маршруты имеют какое-либо пространство имен, ваши ресурсы также должны иметь пространство имен для соответствия. Мои маршруты выглядят примерно так:

namespace :api do
  namespace :v1 do
    resources :tenants
  end
end

Таким образом, пространство имен ресурса должно быть таким же:

tenant = DokiCore::Tenant.find(1); 
resource = DokiCore::API::V1::TenantResource.new(tenant, nil); 
serializer = JSONAPI::ResourceSerializer.new(DokiCore::API::V1::TenantResource); 
serializer.serialize_to_hash(resource);
person typeoneerror    schedule 27.10.2015

Еще один простой способ сериализовать ваши данные в пространстве имен — использовать гем jsonapi-utils. Вам просто нужно будет сделать что-то вроде этого:

class API::V1::UsersController < API::V1::BaseController
  def index
    jsonapi_render json: User.all
  end
end

Этот драгоценный камень основан на ресурсах JSON API, предоставляя способ Rails для сериализации данных в соответствии со спецификациями JSON API.

person Tiago G.    schedule 28.12.2015