2013-05-18 136 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)? ;) –