2013-05-18 55 views
1

我在Rails 4上開始了一個新的應用程序,並且我已經注意到默認情況下JSON呈現的實現方式似乎有什麼突破性變化,但我無法在任何地方找到它,所以我想知道是否有人可以給我(1)API是否真的改變了,以及(2)我如何獲得我需要的行爲(即舊行爲)。打破Rails 4 JSON渲染的變化?

特別是,我所看到的是,這裏對Rails 3

@answer.as_json 

...會回來......

{ 
    id: 1, 
    body: "lorem ipsum..." 
    .... 
} 
在軌道4,5

似乎同樣的方法正在返回:

{ 
    'answer': 
    { 
     id: 1, 
     body: "lorem ipsum..." 
     ... 
    } 
} 

其他人能否確認此行爲已更改?有沒有什麼辦法讓每個模型的舊行爲都沒有重寫as_json?

這個新的實現使得返回包含多個模型的JSON響應更加麻煩(現在要麼必須在控制器動作中的「render:json ...」調用中進行散列合併,要麼通過覆蓋as_json)。

+1

做你'配置/初始化/ wrap_parameters.rb'看? – NARKOZ

回答

5

有一個選項​​控制着as_json方法的頂級行爲。我想這個名字是不言自明的。

至於斷裂API的變化:如果你深入到源代碼,你可以看到,此選項的默認值是在Rails的4.0.0.beta1改爲true但後來它在Rails的4.0.0.rc1收歸false

如果你想確保JSON將不包含根節點,指定config/initializers/wrap_parameters.rbinclude_root_in_json選項:

ActiveSupport.on_load(:active_record) do 
    self.include_root_in_json = false 
end 
+0

謝謝!希望這個更好的宣傳。至少,當beta1上的用戶(或者任何未來的版本會改變默認設置)都會注意到這一點,他們就會登陸這個頁面。 –

+0

@NickZ你知不知道你可以標記爲有幫助的答案[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)? ;) –