Estoy portando una aplicación de Merb 1.1/1.8.7 a Rails 3 (beta)/1.9.1 que utiliza respuestas JSON que contienen fragmentos HTML, por ejemplo, un contenedor JSON que especifica una actualización, en un registro de usuario y la actualización fila de usuario parece. En Merb, dado que cualquier cosa que un método de control devuelva se le da al cliente, uno puede juntar un Hash, asignar un parcial renderizado a una de las teclas y devolver hash.to_json (aunque ciertamente no sea la mejor manera). En Rails , parece que para devolver los datos al cliente uno debe usar el renderizado y el renderizado solo se puede llamar una vez, por lo que renderizar el hash a json no funcionará debido a la renderización parcial.En Rails 3, ¿cómo se renderiza HTML dentro de una respuesta JSON?
A partir de la lectura, parece que uno podría poner esos datos en un archivo de vista .erb JSON, con <% = render parcial%> en y renderizar eso. ¿Existe un modo Rails de resolver este problema (devolver JSON que contenga uno o más fragmentos HTML) aparte de eso?
En Merb:
controlador:
only_provides :json
...
self.status = 204 # or appropriate if not async
return {
'action' => 'update',
'type' => 'user',
'id' => @user.id,
'html' => partial('user_row', format: :html, user: @user)
}.to_json
En Rails:
controlador:
respond_to do |format|
format.json do
render template: '/json/message-1',
locals: {
action: 'update',
type: 'user',
id: @user.id,
partial: 'user_row.html.erb',
locals: { user: @user }
}
end
end
vista: json/message-1.json.erb
{
"action": <%= raw action.to_json %>,
"type": <%= raw type.to_json %>,
"id": <%= raw id.to_json %>,
"html": <%= raw render(partial: partial, locals: locals).to_json %>
}
Mi respuesta a una pregunta similar http://stackoverflow.com/a/15574453/667598 –