2012-05-21 25 views
1

我正在使用active_model_serializers將集合呈現爲JSON以用於消耗數據。 渲染單個項目時一切正常,但集合渲染包含項目數組。如何在使用active_model_serializers時自定義集合渲染?

render json: @scenarios, status: :ok 

給出:

[{"scenario":{"id":4,"name":"My sample scenario"}},{"scenario":{"id":5,"name":"Yet another sample scenario"}}] 

,但我想獲得:

{"scenarios": [{"id":4,"name":"My sample scenario"},{"id":5,"name":"Yet another sample scenario"}]} 

什麼是藝術的方式來獲得所有收集項的根密鑰的狀態,副作用數據等? (該文件是不是該說清楚)

編輯目前

的情況下串行情況如下:

class ScenarioSerializer < ActiveModel::Serializer 
    attributes :id, :name 
end 
+0

http://railscasts.com/episodes/322-rabl – jdoe

+0

@jdoe感謝您的建議,但我想繼續使用active_model_serializers,因爲我不希望自己的代碼都是序列化問題。 –

+0

您的scenario_serializer.rb(或同等版本)是什麼樣的? – sapientpants

回答

1

試用最新版本。 AMS使用控制器名稱作爲數組的關鍵字。默認情況下,它應該像上面顯示的那樣渲染。

如果您的控制器未命名ScenariosController,您可以強制陣列的這樣的根元素:

render json: @scenarios, root: "scenarios", status: :ok 
+0

這是正確的。事實上,我在其他地方有一個錯誤...我的一些模型類有一個自定義的'to_json'實現,我錯過了...... :-( –

+0

很酷。一般來說,AMS中現在有更好的數組處理。 – tee