2012-03-06 13 views
34

Estoy usando Rails 3.2, tengo un formulario y quiero que se publique a través de ajax y que el controlador devuelva json.Rails 3 forma remota: ¿Cómo especifico el tipo de contenido?

estoy usando un ayudante form_for así:

= form_for(@object, :remote => true, :format => :json) do |f| 
.... 

Mi controlador de objetos crean método es el siguiente:

def create 
    respond_to do |format| 
     if @object.save 
     format.html { redirect_to @object } 
     format.json { render json: @object, status: :created, location: @object } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @object.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

La forma es la presentación de ajaxly como se esperaba. ¡Pero el controlador está devolviendo html, no json!

Inspeccionando la solicitud con firebug y, por supuesto, el encabezado http Content-Type en la solicitud ajax se establece en application/html.

La documentación acerca de esto es bastante escasa, formato =>: json parece simplemente anexar ".json" a la acción de formularios, no modificar en realidad ningún encabezado http.

También he intentado: content_type =>: json sin ningún efecto.

puedo código no sólo dura el controlador para volver JSON, ya que hay otros lugares en los que sí quiero que vuelva html ...

Así que ¿alguien sabe cómo decirle al controlador para hacer JSON al utilizar form_for?

Gracias por cualquier ayuda

+0

Lo URL y método obtiene prestados en su etiqueta del formulario en la página? – iltempo

+0

Publicación, la etiqueta completa es:

Chris

+0

No json aquí. ¿Consideraste usar request.xhr? para distinguir entre ajax y solicitudes normales en lugar del formato solicitado? – iltempo

Respuesta

48

Puede establecer el tipo de contenido con:

= form_for(@object, :remote => true, :html => {:'data-type' => 'json'})

Como se describe en rails.js línea 106.

+0

¡Gracias! ¡Sabía que me estaba perdiendo algo obvio! :) – Chris

+16

En Rails 4 puede usar 'format:: json' (o': format =>: json') en lugar de ': html => {: 'data-type' => 'json'}' –

+0

@JamesMcMahon En Rails 3.2 tampoco. – RocketR

0

para los carriles 5, la forma correcta es establecer un atributo de datos data: { type: :json }.

JQuery UJS docs

+1

La respuesta ya existente proporciona esta información y más. Haga un esfuerzo adicional para contribuir realmente a la pregunta o respuesta. –

+0

Eso es un poco pesado @DavyM.Solo intentaba ayudarme y, de hecho, me ayudó con su enlace a los documentos de UJS. – EasyCo

Cuestiones relacionadas