鉴于部分视图只是将给定的ruby对象转换为JSON,render 'ajax/object'
和render json: @object
不应该提供相同的结果吗?
AJAX / object.json.erb:
<%= @object.to_json %>
@object:
{"id":1}
因为他们没有。
render 'ajax/object'
会生成XMLHttpRequest.response === null
,呈现的视图将发送为:(从已保存的.har文件中获取的代码段)
"content": {
"size": 18,
"mimeType": "application/json",
"compression": -11,
"text": "{"id":1}"
},
另一方面, render json: @object
会产生我期望的行为:XMLHttpRequest.response === ("id": 1)
所以我的问题是:渲染行为的差异是否是一个错误,如果没有,render 'ajax/object'
渲染行为的目的是什么?
答案 0 :(得分:1)
这里的问题是模板中创建的字符串是HTML转义的。
虽然您可以通过以下方式修复它:
<%= raw( @object.to_json ) %>
首先使用模板是愚蠢而愚蠢的。 Rails必须通过遍历可能的文件树来查找模板,然后必须解析ERB并创建一个字符串缓冲区等。对于可以通过将对象传递给JSON编码器来处理的事情来说,这只是非常低效。