Je suis portage d'une application de Merb 1.1/1.8.7 à Rails 3 (beta)/1.9.1 qui utilise des réponses JSON contenant des fragments HTML, par exemple, un conteneur JSON spécifiant une mise à jour, sur un enregistrement de l'utilisateur, et la mise à jour la ligne de l'utilisateur ressemble à. Dans Merb, puisque tout ce que retourne une méthode de contrôleur est donné au client, on peut assembler un Hash, assigner un rendu à l'une des clés et retourner hash.to_json (bien que ce ne soit certainement pas la meilleure solution). , il semble que pour rendre les données au client, il faut utiliser render et render qui ne peut être appelé qu'une seule fois, donc rendre le hash à json ne fonctionnera pas à cause du rendu partiel. A la lecture, il semble que l'on pourrait mettre ces données dans un fichier JSON .erb view, avec <% = render partial%> in et rendre cela. Existe-t-il une méthode Rails pour résoudre ce problème (renvoyer JSON contenant un ou plusieurs fragments HTML) autre que celle-ci?Dans Rails 3, comment rendre un HTML dans une réponse JSON?
En Merb:
contrôleur :
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
Dans Rails:
contrôleur :
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
Vue: 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 %>
}
Ma réponse à une question similaire http://stackoverflow.com/a/15574453/667598 –