【发布时间】:2011-01-28 10:08:42
【问题描述】:
我正在将一个应用程序从 Merb 1.1 / 1.8.7 移植到 Rails 3 (beta) / 1.9.1,它使用包含 HTML 片段的 JSON 响应,例如,在用户记录上指定更新的 JSON 容器,以及更新的用户行看起来像。在 Merb 中,由于控制器方法返回的任何内容都会提供给客户端,因此可以将一个 Hash 放在一起,将渲染的部分分配给其中一个键并返回 hash.to_json(尽管这肯定不是最好的方法。)在 Rails 中, 似乎要将数据返回给客户端必须使用render,并且render只能调用一次,因此由于部分渲染,将散列渲染为json将不起作用。
通过阅读,似乎可以将该数据放入 JSON .erb 视图文件中,并在其中包含 并进行渲染。除此以外,是否有解决此问题的 Rails 方式(返回包含一个或多个 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 %>
}
【问题讨论】:
-
我对类似问题的回答stackoverflow.com/a/15574453/667598
标签: ruby-on-rails json merb