轨道wrap_parameters与include_root_in_json,有什么区别



在一个新的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,它将不包含根节点(即用户 => {:name => 'John'},而只是 {:name => 'john'}

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

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 从对象生成的 json 是否通过 to_json 命令包装。


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

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

否则,你只会得到

{name: 'John Smith'}

最新更新