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 %>
}
InformationsquelleAutor ylg | 2010-03-17