Nic*_*k Z 1 ruby activerecord ruby-on-rails ruby-on-rails-4
我在Rails 4上启动了一个新的应用程序,我注意到默认情况下JSON渲染的实现方式似乎是一个突破性的变化,但我无法在任何地方找到它,所以我想知道是否有人能给我一些见解关于(1)API是否实际发生了变化,以及(2)我如何获得我需要的行为(即旧行为).
特别是,我所看到的是,Rails 3中的位置
@answer.as_json
Run Code Online (Sandbox Code Playgroud)
......会回来......
{
id: 1,
body: "lorem ipsum..."
....
}
Run Code Online (Sandbox Code Playgroud)
在Rails 4中似乎返回相同的方法:
{
'answer':
{
id: 1,
body: "lorem ipsum..."
...
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以确认此行为已更改?是否有任何方法可以使旧的行为无法覆盖每个模型的as_json?
这个新实现使得返回包含多个模型的JSON响应变得更加麻烦(现在要么必须在控制器操作中的"render:json ..."调用中通过哈希合并或者通过重写as_json来完成).
有一个选项ActiveRecord::Base.include_root_in_json可以控制方法的顶级行为as_json.我猜这个名字是不言自明的.
至于破API的变化:如果你深入到源代码,你可以看到,此选项的默认值改为true在Rails的4.0.0.beta1但后来它被还原到falseRails中4.0.0.rc1.
如果要确保JSON不包含根节点,请include_root_in_json在config/initializers/wrap_parameters.rb以下位置指定选项:
ActiveSupport.on_load(:active_record) do
self.include_root_in_json = false
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |