为什么render_to_string弄乱了页面?

时间:2014-02-11 20:44:05

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

我有一个控制器从数据库中获取一些数据,并且在我的浏览器中可以很好地呈现html视图。

现在我需要在我的html中引导一些json(由javascript使用)。

我添加以下代码以在控制器中呈现json:

@my_json = render_to_string(template: 'dimension_types/index.json.jbuilder')

我什么都不做,只需将此代码添加到我的控制器中,会发生什么,浏览器现在只显示我的网页的HTML代码。在html源代码中,我的页面包含在{{1}中}标签。

日志中没有错误。我尝试添加layout:false,传递处理程序和格式的各种组合以进行渲染 - 没有任何变化。

我做错了什么?我遗漏了哪些文件?

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题。可能有更好的方法可以做到这一点,但这里有一个半工作方式可以工作:

# the_controller.rb
def your_action
  #...
  @json_string = render_to_string(template: 'a_template', formats: [:json])
  # reset the content type header
  response.headers["Content-Type"] = 'text/html'
  #...
end

下一段代码显示了我在视图中如何使用JSON字符串。如果JSON包含用户生成的数据,您将需要更彻底地清理它以防止XSS安全风险(更多信息:https://stackoverflow.com/a/10390313/111635)。我生成的JSON没有这个问题,所以我只使用了html_safe

# the_view.html.erb
# ... bunch of ERB code ...
<%= javascript_tag do %>
  $(document).ready(function() {
    do_stuff_with_json(<%= @json_string.html_safe %>);
  });
<% end %>