使用Active Model Serializer,是否有一種簡單且集成的方式來在序列化集合時返回JSON「對象」(然後在客戶端框架中將其轉換爲JavaScript對象)而不是JSON「數組」? (我引用對象和數組,因爲返回的JSON本質上是一個字符串)。如何使用Active Model ArraySerializer返回json「object」而不是json「array」?
比方說,我有以下ArticleSerializer:
class ArticleSerializer < ActiveModel::Serializer
attributes :id, :body, :posted_at, :status, :teaser, :title
end
我把它從ArticlesController:
class ArticlesController < ApplicationController
def index
@feed = Feed.new(articles: Article.all)
render json: @feed.articles, each_serializer: ArticleSerializer
end
end
有沒有辦法通過一個選項,串行,使其返回類似:
{"articles":
{
"1":{
...
},
"2":{
...
}
}
}
而不是
{"articles":
[
{
"id":"1",
...
},
{
"id":"2"
...
}
]
}
編輯:我想,在這個崗位(繼承AMS ArraySerializer這樣)提出的方法可能會有所幫助(Active Model Serializer and Custom JSON Structure)
你說得對。看看源代碼,看起來沒有這樣的選項。我想我必須修改json_api適配器[link](https://github.com/rails-api/active_model_serializers/blob/master/lib/active_model/serializer/adapter/json_api.rb)中的serializable_hash_for_collection方法。或者修改散列,使用RegEx獲得最佳性能。或者迭代我的文章集合,並在每個文檔上調用單個項目序列化器,並在將它們傳遞給呈現之前將它們包裝在散列中。非常感謝!!! – Cedric
@Cedric看看我剛剛勾畫的解決方案! – beauby
這看起來非常好。我明天會試一試,如果有作品會讓你知道,但它看起來非常好。 Merci beaucoup! – Cedric