Estoy tratando de tener una respuesta JSON en el que algún valor es HTML representado por un parcialJSON no puede encontrar otra html parcial
#projects_Controller.rb
def index
respond_to do |f|
f.json
end
end
# index.json.erb
{
"html":"<%= raw escape_javascript(render :partial => 'projects/disclaimer') %>"
}
pero me da el siguiente error:
ActionView::Template::Error (Missing partial projects/disclaimer with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>
[:json], :locale=>[:en, :en]} in view paths "c:/rails/app/views", "c:/rails/vendor/plugins/more/app/views", "C:/Ruby192/lib/ruby/gems/1.9.1/gems/devise-1.1.8/app/views")
Parece que JSON solicita renderizaciones parciales con .json.erb en su nombre, pero no con .html.erb, que es lo que tengo. ¿Hay alguna manera de especificar "html"?
añadido: Si la solicitud es 'js', y en index.js.erb que hacen que el casi mismo código: # index.js.erb
disclaimer = {
"html":"<%= raw escape_javascript(render :partial => 'projects/disclaimer') %>"
}
lo hace encontrar los proyectos/descargo de responsabilidad .html.erb y lo renderiza correctamente. Me pregunto por qué hay tal inconsistencia en que si uno solicita js, cualquier representación parcial en su plantilla buscará partial_name.html.erb, pero si se solicita json, la representación parcial solicitaría partial_name.json.erb?
Gracias
Este enfoque también funciona desde dentro de un controlador que está renderizando JSON; Configuro 'self.formats = [: html]', luego 'render_to_string (: partial => 'an_html_partial',: locals => {: whatever => whatever})', y luego puedo renderizar json fine. – alxndr
En caso de que también tenga otros parciales json, es posible que desee hacer 'self.formats + = [: html]' en su lugar. –