Ich portiere eine Anwendung von Merb 1.1/1.8.7 nach Rails 3 (beta)/1.9.1, die JSON-Antworten mit HTML-Fragmenten verwendet, z. B. einen JSON-Container, der ein Update angibt, auf einem Benutzerdatensatz und dem aktualisierten Benutzerzeile sieht aus wie. In Merb, da was auch immer eine Controller-Methode zurückgibt, dem Client gegeben wird, kann man einen Hash zusammenstellen, ein gerendertes Partial einem der Schlüssel zuweisen und hash.to_json zurückgeben (obwohl das sicherlich nicht der beste Weg ist). In Rails Es scheint, dass, um Daten zurück zum Client zu bekommen, man muss Render verwenden und Rendern kann nur einmal aufgerufen werden, so Rendering der Hash zu Json wird nicht funktionieren wegen der partiellen Render.In Rails 3, wie rendert man HTML innerhalb einer JSON-Antwort?
Aus dem Lesen von es scheint, könnte man diese Daten in eine JSON-.erb-View-Datei mit <% = partiellen%> in und render rendern. Gibt es eine Rails-Methode zur Lösung dieses Problems (JSON mit einem oder mehreren HTML-Fragmenten zurückgeben)?
In Merb:
Controller:
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
In Rails:
Controller:
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
Ansicht: 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 %>
}
Meine Antwort auf eine ähnliche Frage http://stackoverflow.com/a/15574453/667598 –