jsonapi-rb关系示例

时间:2017-08-09 17:32:51

标签: ruby-on-rails json-api

我试图获得一个看起来像这样的JSON

{
   "data" : {
     "type": "field_definition",
     "id": 5,
     "attributes": {
        "specifier": "foo",
        "entity_type": "bar"
     }
     "relationships": {
        "active_collections" : [1,2,3]
     }
   }
}

我做了一个测试课,我用它作为我的模型:

  class Test
     attr_reader :id,
              :specifier,
              :entity_type,
              :active_collections

      def initialize
        @id = 5
        @specifier = "foo"
        @entity_type = "bar"
        @active_collections = [1,2,3]
      end
    end

我的序列化器:

class SerializableFieldCollection < JSONAPI::Serializable::Resource
  type 'field_collection'

  attributes :specifier, :entity_type

  has_many :active_collections 
end

我称之为

之类的东西
  def index
    render jsonapi: Test.new,
           class:   SerializableFieldCollection,
           status:  200   
  end


{"data"=>
  {"id"=>"5", "type"=>"field_collection", "attributes"=>{"specifier"=>"foo", "entity_type"=>"bar"}, "relationships"=>{"active_collections"=>{"meta"=>{"included"=>false}}}}}

有人能指出我如何使用jsonapi-rb gem中的relations / has_many函数吗?

2 个答案:

答案 0 :(得分:1)

我认为你的问题是关于{"meta"=>{"included"=>false}}部分,你宁愿做{"data"=>[{ "type": "foo", "id": "1" },{ "type": "foo", "id": "2" }, ...]}吗? 如果是这样,则默认行为是仅在包含关系时序列化关系的链接数据。要在响应中包含关系,请使用include渲染器选项。

示例:

render jsonapi: Test.new,
       class:   SerializableFieldCollection,
       include: 'active_collections',
       status:  200   

答案 1 :(得分:0)

您是否确认JSONAPI::Serializable::Resource已实施ActiveModelActiveRecord?如果没有,我认为你不能在has_many使用ActiveCollection。您对{{1}}的定义在哪里?