带有JSON Api的Rails - 包括has_many关系

时间:2017-04-22 17:53:29

标签: ruby-on-rails include has-many json-api

我有三个模型,项目和转移和类别(又名项目类型):

class Item < ApplicationRecord
  belongs_to :category
  has_many :transfers
end

class Transfer < ApplicationRecord
  belongs_to :item
end

class Category < ApplicationRecord
  has_many :item
end

在我的控制器中,我有

render json: @item, include: %i[transfer category]
# FWIW the include doesn't seem to affect category at all...

这导致JSON Api有效负载采用以下形状:

{
  data: {
      id,
      attributes: {
        /* the other attributes */
        transfers: [ { /* full transfer object */ } ]
      },
      relationships: {
        category: { data: { id, type: 'categories' } },
        transfers: { data: [ { /* full transfer object */ } ]
      }
    }
  },
  included: [ { type: 'category', id, attributes } ]
}

这些类别表现得我的期望。我如何得到它,以便transfer数组中包含每个included而不是嵌套在属性或关系中?

谢谢!

编辑:不重复。我没有尝试嵌套响应,只是将它们包含在included部分中以符合JSON API规范。无论如何,我想出来了,很快就会有答案!

2 个答案:

答案 0 :(得分:1)

我认为,这个问题有点复制。看看这个:Nesting :json include in Rails

您需要使用as_json和嵌套include

答案 1 :(得分:0)

原来我错过了TransferSerializer!一旦我添加了一个,它就像你期待的那样放在included数组中。