我正在将一个应用程序从Merb 1.1 / 1.8.7移植到Rails3 (beta) / 1.9.1,它在用户记录上使用包含HTML片段的JSON响应,例如,指定更新的JSON容器,更新后的用户行如下所示。在Merb中,因为控制器方法返回的任何内容都被提供给客户端,所以可以组合一个哈希,将呈现的部分分配给其中一个键,然后返回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 %>
}
https://stackoverflow.com/questions/2459787
复制相似问题