2012-02-03 19 views
18

Estoy publicando algunos JSON como el formulario JSON de {:name => "hello"} en mi controlador Rails 3 ExampleController.Rails 3 params envoltorio no deseado

En lugar de obtener params como:

{:name => "hello"} 

que estoy recibiendo:

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

(Si los datos JSON aparece dos veces y se añaden la acción y el controlador!)

Cualquier idea por qué ?

+0

¿Está configurando los encabezados content-accept y Accepts como escribí aquí? http://stackoverflow.com/questions/4914745/post-json-to-rails-server –

+0

Sí, está publicado desde jQuery $ .ajax con tipo: json – Blacksad

Respuesta

34

ActionController hace automáticamente para las solicitudes de JSON para que pueda pasar fácilmente los parámetros en Example.create o @example.update_attributes, lo que significa que el cliente no necesita empaquetarlo para su modelo - que sólo puede incluir name et. Alabama. en el nivel superior de tus datos JSON y el controlador manejará la agrupación.

@example = Example.create params[:example] 

El código del parámetro envoltura obtiene el nombre de su modelo a partir del nombre del controlador, pero se puede cambiar usando la macro wrap_parameters en su controlador:

wrap_parameters :thing 

O apagarlo con

wrap_parameters false 

en Rails 3.2, si su modelo utiliza attr_accessible, la función de parámetros de envolver también excluye cualquier parámetro que no son accesibles a la masa culo ignición También puede usar la macro para hacer que esta característica de ajuste se aplique a otros tipos de contenido además de JSON, si lo desea.

De forma predeterminada en una aplicación de Rails recién creada, esto está configurado para todos los controladores que usan un inicializador. Busque config/initializers/wrap_parameters.rb.