Rails wrap_parameters vs include_root_in_json,有什么区别?

时间:2012-05-27 15:10:44

标签: ruby-on-rails-3

在新的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 =>'john'}

第一个wrap_parameters块的作用是什么?它作用于action_controller ..为什么?

1 个答案:

答案 0 :(得分:66)

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


e.g。 Person.to_json。如果include_root_in_json已启用,您将获得:

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

否则,你只会得到

{name: 'John Smith'}