2012-02-03 15 views
18

Sto postando alcuni JSON come il modulo JSON di {:name => "hello"} al mio controller ExampleController Rails 3.Rails 3 parametri involucro indesiderato

Invece di ottenere params come:

{:name => "hello"} 

sto ottenendo:

{:name => "hello", :controller => "example", :action => "index", :example => {:name => "hello"} 

(sì i dati JSON appare due volte e sono aggiunti azione e regolatore!)

Qualsiasi idea perché ?

+0

Stai impostando il contenuto: accetta e accetta intestazioni come ho scritto qui? http://stackoverflow.com/questions/4914745/post-json-to-rails-server –

+0

Sì - è pubblicato da jQuery $ .ajax con tipo: json – Blacksad

risposta

34

ActionController fa automaticamente per le richieste JSON in modo che si può facilmente passare i parametri in Example.create o @example.update_attributes, il che significa che il cliente non ha bisogno di confezionare in su per il modello - può semplicemente includere name et. al. al livello più alto dei dati JSON e il controller gestirà il raggruppamento.

@example = Example.create params[:example] 

Il codice del parametro di avvolgimento ottiene il nome del modello dal nome del controller, ma è possibile modificarlo utilizzando la macro wrap_parameters nel controller:

wrap_parameters :thing 

O spegnerlo con

wrap_parameters false 

in Rails 3.2, se il modello utilizza attr_accessible, la funzione dei parametri di avvolgimento esclude anche tutti i parametri che non sono accessibili a culo di massa ignment. Puoi anche utilizzare la macro per rendere questa funzione di avvolgimento applicabile ad altri tipi di contenuto oltre a JSON, se lo desideri.

Per impostazione predefinita in un'applicazione Rails appena creato, questo è configurato per tutti i controller utilizzando un inizializzatore. Cerca config/initializers/wrap_parameters.rb.