Dans Rails 3, comment rendre le code HTML à l'intérieur d'une réponse JSON?
Je suis le portage d'une application à partir de Merb 1.1 /1.8.7 pour Rails 3 (beta) /1.9.1 qui utilise réponses JSON contenant des fragments de HTML, par exemple, un JSON contenant la spécification d'une mise à jour, sur un enregistrement d'utilisateur, et l'utilisateur mise à jour de ligne ressemble . Dans Merb, puisque tout ce qu'un contrôleur de la méthode renvoie la valeur est donnée au client, on peut mettre ensemble une table de Hachage, attribuer un rendu partiel de l'une des touches et le retour de hachage.to_json (bien que certainement peut-être pas la meilleure façon.) Dans les Rails, il semble que pour obtenir des données vers le client, on doit utiliser le rendu et le rendu ne peut être appelé qu'une seule fois, de sorte que le rendu de la table de hachage en json ne fonctionne pas en raison de la partielle de rendu.
De lecture autour, il semble que l'on pouvait mettre les données en JSON .erb fichier de vue, avec <%= render partiel %> et rendre cette. Est-il un Rails-façon de résoudre ce problème (retour JSON contenant un ou plusieurs fragments de HTML) d'autre?
Dans 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 Les 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/messages-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, stackoverflow.com/a/15574453/667598
Vous devez vous connecter pour publier un commentaire.
Le plus proche de l'original à partir de Merb approche que j'ai pu trouver dans les Rails est d'utiliser #render_to_string
C'est un peu juste de la complexité qui vient de l'ajout d'une couche de json.erb modèles dans le mélange, si c'est les Rails approche Puriste, je ne pouvais pas le dire; peut-être quelque chose avec RJS n'est généralement utilisée.
self.formats += [:html]
dansjson/message-1.json.erb
serait plus Railsy façon de gérer cela. Cette méthode est suggéré dans d'autres cas similaires: stackoverflow.com/questions/5401696/... et stackoverflow.com/questions/7806533/...Il y a une autre question qui a plus de solutions pour json.cre des fichiers. Voir json erb modèle ne peut pas trouver d'autres html partielle