2012-05-27 6 views
23

in einer neuen Rails 3.2 Anwendung, die Sie in config/initializers/wrap_parameters.rb die folgenden Zeilen finden:Rails wrap_parameters vs include_root_in_json, was ist der Unterschied?

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 

Mein Verständnis für den zweiten Codeblock ist, dass, wenn Sie ein Objekt zu json konvertieren, wird es nicht einen Wurzelknoten einschließen (dh Benutzer => {: name => 'John'}, sondern nur {: name => 'john'}

Was macht dann der erste wrap_parameters Block? Er wirkt auf action_controller .. warum?

Antwort

63

include_root_in_json ist Wrap json in Rails

instanziiert

wrap_parameters ist Wrack JSON empfangen von einer Anfrage.

Wenn Sie wrap_parameters aktiviert haben, und wenn Sie die folgende json durch einen POST-Befehl an Rails schicken:

{name: 'John Smith'}

Rails automatisch wickeln Sie das JSON es in erhalten:

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

include_root_in_json, auf der anderen Seite ist, ob die JSON Rails generiert von einem Objekt wird umbrochen oder nicht durch den to_json Befehl.


z.B. Person.to_json. Wenn include_root_in_json aktiviert ist, erhalten Sie:

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

Andernfalls werden Sie nur bekommen

{name: 'John Smith'}

+0

Dank paaren, sehr klar. – Inc1982

+0

Also das ist es, was es tut. Warum ist diese Standardeinstellung aktiviert? Sollte ausgeschaltet sein, wenn Sie 'rails new my-app --api' machen –

Verwandte Themen