26

在一个新的 Rails 3.2 应用程序中,您可以在 config/initializers/wrap_parameters.rb 中找到以下行:

ActiveSupport.on_load(:action_controller) do
  wrap_parameters format: [:json]
end

# Disable root element in JSON by default.
ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = false
end

我对第二个代码块的理解是,如果将对象转换为 json,它将不包含根节点(即 users => {:name => 'John'},而只是 {:name => '约翰'}

那么第一个 wrap_parameters 块做什么呢?它作用于 action_controller .. 为什么?

4

1 回答 1

67

include_root_in_json是包装在 Rails 中实例化的 json

wrap_parameters是包装从请求中收到的json。

如果您已wrap_parameters启用,并且您通过 POST 命令将以下 json 发送到 Rails:

{name: 'John Smith'}

Rails 会自动将接收到的 JSON 包装成:

{"person": {name: 'John Smith'}}

include_root_in_json另一方面,是 Rails从对象生成to_json的 json 是否通过命令包装。


例如Person.to_json。如果include_root_in_json启用,您将获得:

{"person": {name: 'James Brown'}}

否则,你只会得到

{name: 'John Smith'}

于 2012-05-27T16:38:34.813 回答