1

给定一个简单地将给定 ruby​​ 对象转换为 JSON 的局部视图,不应该render 'ajax/object'提供render json: @object相同的结果吗?

ajax/object.json.erb:

<%= @object.to_json %>

@目的:

{&quot;id&quot;:1}

因为他们没有。

render 'ajax/object'结果XMLHttpRequest.response === null和渲染视图被发送为:(摘自保存的 .har 文件的片段)

      "content": {
        "size": 18,
        "mimeType": "application/json",
        "compression": -11,
        "text": "{&quot;id&quot;:1}"
      },

render json: @object,另一方面,会导致我预期的行为:XMLHttpRequest.response === ("id": 1)

所以我的问题是:呈现行为的这种差异是否是一个错误,如果不是,那么render 'ajax/object'呈现行为的目的是什么?

4

1 回答 1

1

这里的问题是模板中创建的字符串是 HTML 转义的。

虽然您可以使用以下方法修复它:

<%= raw( @object.to_json ) %>

首先,使用模板是愚蠢和愚蠢的。Rails 必须通过遍历可能的文件树来查找模板,然后必须解析 ERB 并创建字符串缓冲区等。这对于可以通过将对象传递给 JSON 编码器来处理的事情来说效率非常低。

于 2017-01-13T23:02:53.433 回答