Rails wrap_parameters vs include_root_in_json,有什么区别?

Inc*_*982 26 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
Run Code Online (Sandbox Code Playgroud)

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

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

jst*_*ong 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另一方面,是通过命令是否包装了对象生成的json Rails to_json.


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

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

否则,你会得到的

{name: 'John Smith'}