2012-05-27 7 views
23

en una nueva aplicación Rails 3.2 se puede encontrar en config/inicializadores/wrap_parameters.rb las siguientes líneas:Rails wrap_parameters vs include_root_in_json, ¿cuál es la diferencia?

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 

Mi comprensión para el segundo bloque de código es que si convierte un objeto a JSON, no lo hará incluya un nodo raíz (es decir, users => {: name => 'John'}, más bien será {: name => 'john'}

¿Qué hace el primer bloque wrap_parameters? Actúa en action_controller ¿Por qué?

Respuesta

63

include_root_in_json es para envolver json instanciado en Rails

wrap_parameters es para envolver json recibido de una solicitud.

Si tiene wrap_parameters habilitado, y si envía el siguiente JSON a través de un comando POST para Rieles:

{name: 'John Smith'}

rieles se ajustará automáticamente el JSON que recibido en:

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

include_root_in_json, por otro lado, es si el Json Rails genera desde un objeto envuelto o no a través del comando to_json.


e.g. Person.to_json. Si include_root_in_json está habilitado, obtendrá:

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

De lo contrario, vas a tener

{name: 'John Smith'}

+0

Gracias compañero, muy claro. – Inc1982

+0

Así que esto es lo que hace. ¿Por qué está activado este valor predeterminado? Debería estar apagado si hago 'rails new my-app --api' –

Cuestiones relacionadas