我有一个控制器从数据库中获取一些数据,并且在我的浏览器中可以很好地呈现html视图。
现在我需要在我的html中引导一些json(由javascript使用)。
我添加以下代码以在控制器中呈现json:
@my_json = render_to_string(template: 'dimension_types/index.json.jbuilder')
我什么都不做,只需将此代码添加到我的控制器中,会发生什么,浏览器现在只显示我的网页的HTML代码。在html源代码中,我的页面包含在{{1}中}标签。
日志中没有错误。我尝试添加layout:false,传递处理程序和格式的各种组合以进行渲染 - 没有任何变化。
我做错了什么?我遗漏了哪些文件?
答案 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 %>