Tengo un FooController que responde a HTML y consultas JS (Ajax):¿Cómo incluyo HTML en una respuesta de JS Rails?
# app/controllers/foo_controller.rb:
class FooController < ApplicationController
layout 'foo'
def bar
respond_to do |format|
format.html # foo/bar.html.erb
format.js # foo/bar.js.erb
end
end
end
Las plantillas para apoyarlo:
# app/views/layouts/foo.html.erb:
<html>...<%= yield %>...</html>
# app/views/layouts/foo.json.erb:
<%= yield %>
Y una plantilla de AJAX en el que quiero rendir un parcial:
# app/views/foo/bar.js.erb:
dojo.byID('some_div').innerHTML = "<%= escape_javascript(render(:partial => 'some/partial')) %>";
Si la plantilla JS solo tiene el viejo y simple JS en ella (como alert('hi');
), que utiliza mi plantilla JS. Sin embargo, cuando puse el render (: parcial), hace que toda la respuesta use la plantilla HTML, lo que significa que ya no es válida.
Una posible solución es utilizar una función para el diseño:
class FooController < ApplicationController
layout :choose_layout
...
private
def choose_layout
return nil if request.xhr?
'foo'
end
end
Pero mi versión debe trabajo! ¿Por qué no?
Creo que la razón por la que no funcionó fue un pequeño error: tenía una plantilla .json.erb, pero ninguna .js.erb y ninguna .erb por defecto. –