Rails 与 JSON Api - 包括 has_many 关系
Rails with JSON Api - including has_many relationships
我有三个模型,Item 和 Transfer 以及 Category(又名 Item Type):
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 规范。无论如何,我想通了,很快就会有答案!
我认为,这个问题有点重复。看看这个:Nesting :json include in Rails
您需要使用 as_json
和嵌套 include
。
原来我少了一个TransferSerializer
!一旦我添加了一个,它就会像您期望的那样被放入 included
数组中。
我有三个模型,Item 和 Transfer 以及 Category(又名 Item Type):
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 规范。无论如何,我想通了,很快就会有答案!
我认为,这个问题有点重复。看看这个:Nesting :json include in Rails
您需要使用 as_json
和嵌套 include
。
原来我少了一个TransferSerializer
!一旦我添加了一个,它就会像您期望的那样被放入 included
数组中。