2011-06-06 8 views
11

Sto solo chiedendo come rotaie conosce il formato della richiesta per entrare in modo corretto nella famosa:In che modo i binari determinano il formato della richiesta in entrata?

respond_to do |format| 
    format.html 
    format.xml 
    format.json 
end 

A titolo di esempio si consideri questa situazione che ho affrontato. Supponiamo che tramite JavaScript (utilizzando jQuery) faccio una richiesta POST esplicitando dataType: json

$.ajax({ 
     type: 'POST', 
     url: 'example.com', 
     data: data, 
     dataType: 'json' 
    }); 

Quando questa richiesta azione di controllo portata, in piedi al suo interno con il debugger rubino, ho ispezionare @ request.format e posso vedere quel tipo di contenuto è application/json. Quindi il controller risponde al formato JSON come previsto.

Ma sono confuso con il simbolo del formato specificato nelle rotte. Supponiamo che venga fatta una richiesta a example.com/parts.json ma nella richiesta il tipo di contenuto è application/html o application/xml. Il controller risponde al formato json o html o xml ??

Grazie!

risposta

7

Da ActionController::MimeResponds: "Rails determina il formato di risposta desiderato dall'intestazione HTTP Accept inviata dal client."

+0

Grazie! Ma non riesco già a capire cosa significhi: il simbolo di formato che appare in routes.rb per esempio. Perché se invio una richiesta al mio server (per esempio GET /entities.xml) e nel mio controller ho un gestore di risposta xml, l'intestazione accept dice application/XML in google chrome inspector. C'è qualcosa nel mezzo che non ho ancora capito. Rack è quello che vede .xml nell'URL e in base a questo costruisce l'APPROVAZIONE appropriata con le intestazioni accettabili? Grazie ancora! – flyer88

+2

Fondamentalmente il: xml è uno dei tipi mime registrati qui https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/mime_types.rb Ecco dove si collega il tipo mime con : simbolo di formato. Questo simbolo è usato per chiamare il renderer appropriato, che è registrato con ActionController :: Renderers. – mikewilliamson

Problemi correlati