アプリケーションをMerb1.1/1.8.7からRails3(beta)/ 1.9.1に移植しています。このアプリケーションは、HTMLフラグメントを含むJSON応答を使用します。たとえば、ユーザーレコードの更新を指定するJSONコンテナー、および更新されたユーザー行のように見えます。Merbでは、コントローラーメソッドが返すものはすべてクライアントに渡されるため、ハッシュをまとめ、レンダリングされたパーシャルをキーの1つに割り当て、hash.to_jsonを返すことができます(ただし、これは確かに最善の方法ではない場合があります)。 、データをクライアントに戻すには、renderを使用する必要があり、renderは1回しか呼び出せないため、部分的なレンダリングのため、jsonへのハッシュのレンダリングは機能しません。
読んでみると、そのデータをJSON .erbビューファイルに入れて、<%=レンダリング部分%>を入れてレンダリングできるようです。それ以外に、この問題を解決するRails-way(1つ以上のHTMLフラグメントを含むJSONを返す)はありますか?
Merbの場合:
コントローラー:
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
Railsの場合:
コントローラー:
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
ビュー: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 %>
}