1

我在 Rails 4 上启动了一个新应用程序,我注意到默认情况下 JSON 渲染的实现方式似乎发生了重大变化,但我在任何地方都找不到它,所以我想知道是否有人可以给我一些见解关于(1)API 是否实际发生了变化,以及(2)我如何获得我需要的行为(即旧行为)。

特别是,我看到的是,在 Rails 3 中

@answer.as_json

...会回来...

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

在 Rails 4 中,似乎返回的是相同的方法:

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

其他人可以确认这种行为已经改变吗?有没有办法让旧的行为恢复到没有覆盖每个模型的 as_json ?

这个新实现使得返回包含多个模型的 JSON 响应变得更加麻烦(现在要么必须通过控制器操作中的“render :json ...”调用中的哈希合并来完成,要么通过覆盖 as_json 来完成)。

4

1 回答 1

5

有一个选项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
于 2013-05-18T20:50:28.237 回答