2012-05-27 16 views
23

w nowym Rails 3.2 aplikacji można znaleźć w config/inicjalizatorów/wrap_parameters.rb następujące wiersze:Rails wrap_parameters vs include_root_in_json, jaka jest różnica?

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 

Moje zrozumienie dla drugiego bloku kodu jest, że jeśli konwertować obiekt JSON, nie będzie include root (tj. users => {: name => 'John'}, a raczej będzie to {: name => 'john'}

Co robi pierwszy blok wrap_parameters? Działa na control_controller .. dlaczego?

Odpowiedz

63

include_root_in_json to wrap json z instancjami w Railsach

wrap_parameters to wrap json odebrany z żądania.

Jeśli masz wrap_parameters włączona, a jeśli przesłać następujące json za pośrednictwem polecenia POST do Rails:

{name: 'John Smith'}

Szyny automatycznie owinąć JSON to odebrany do:

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

include_root_in_json, z drugiej strony, czy json Rails generuje z obiektu jest pakowany lub nie za pomocą polecenia to_json.


np. Person.to_json. Jeśli include_root_in_json jest włączona, dostaniesz:

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

W przeciwnym razie po prostu dostać

{name: 'John Smith'}

+0

Dzięki kolego, bardzo jasne. – Inc1982

+0

Tak to robi. Dlaczego to ustawienie domyślne jest włączone? Powinien być wyłączony, jeśli '' rails new my-app --api' –

Powiązane problemy