正确地在JSON ERB模板中呈现HTML部分

时间:2016-01-02 09:37:14

标签: jquery ruby-on-rails json ruby-on-rails-4

我一直在努力让以下内容在我的Rails 4应用程序中运行;我正在尝试从搜索API返回JSON响应,该API在返回的对象中生成了一些HTML:

## Controller code
...
respond_to do |format|
  format.html # index.html.haml
  format.json # index.json.erb
end

## JSON view code
[
  <% @results.each do |result| %>
  {
    "type": "<%= result.type -%>",
    "content": "<%= escape_javascript render partial: "search/#{result.type}", formats: :html, locals: { result: result } %>"
  }<%= ',' unless result == @results.last %>
  <% end %>
]

当我对搜索URL执行JSON请求时,生成的代码看起来正确转义并在各种在线JSON验证器中成功验证,但jQuery拒绝触发getJSON的回调函数。

如果我删除content部分,回调会很好,所以我知道它与部分渲染有关。

任何指针都非常感激。如上所述,我在其他Stack Overflow问题中已经完成了许多建议的解决方案,并没有任何乐趣。

1 个答案:

答案 0 :(得分:0)

我建议使用原生to_json方法来手动创建json:

<%=raw  @results.map do |result|
          { "type" => result.type,
            "content" => render(partial: "search/#{result.type}", formats: :html, locals: { result: result }) }
    end.to_json %>