3

Rails エンジンでJSONAPI リソースを使用しようとしていますDokiCore::Tenant。doki_core/app/models/tenant.rb と doki_core/app/resources/tenant_resource.rb で (モデル) を定義しDokiCore::TenantResourceました。ハッシュにシリアル化しようとすると、次のエラーが発生します。

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);

エラーが発生する場所です。

リンクを正しく機能させたり、無効にしたりするにはどうすればよいですか? 出力されたjsonの「links」キーの下にリンクとしてURLをリソースに追加すると思います。

4

2 に答える 2

4

これを整理しました。ルートが何らかの方法で名前空間化されている場合は、リソースも一致するように名前空間化する必要があります。私のルートは次のようになります。

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);
于 2015-10-27T16:57:10.470 に答える
3

名前空間データをシリアル化するもう 1 つの簡単な方法は、jsonapi-utils gem を使用することです。次のようなことをするだけです:

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

この gem は JSON API Resources に基づいており、JSON API の仕様でシリアル化されたデータを取得する Rails の方法をもたらします。

于 2015-12-28T17:31:19.777 に答える