Los Rails detectan si la solicitud fue AJAX

En mi acción, solo deseo responder con el procesamiento si fue llamado desde una solicitud de AJAX. ¿Cómo lo verifico?

Quiero hacer algo como esto:

def action @model = Model.find(params[:id]) respond_to do |format| if (wasAJAXRequest()) #How do I do this? format.html #action.html.erb else format.html {redirect_to root_url} end end 

Puede verificar un header[X-Requested-With] para ver si se trata de una solicitud AJAX. Aquí hay un buen artículo sobre cómo hacerlo.

Aquí hay un ejemplo:

 if request.xhr? # respond to Ajax request else # respond to normal request end 

Si está utilizando :remote => true en sus enlaces o formularios, haría:

 respond_to do |format| format.js { #Do some stuff } 

También puede consultar antes del bloque responder_ a llamando a request.xhr? .

Sé consciente de

 request.xhr? 

devuelve valores numéricos o nulos, no valores BOOLEAN, como dicen los documentos, de acuerdo con = ~.

 irb(main):004:0> /hay/ =~ 'haystack' => 0 irb(main):006:0> /stack/ =~ 'haystack' => 3 irb(main):005:0> /asfd/ =~ 'haystack' => nil 

Está basado en esto:

 # File actionpack/lib/action_dispatch/http/request.rb, line 220 def xml_http_request? @env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/ end 

asi que

 env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/ => 0 

Los documentos:

http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F