html_safe无法在rails中使用javascript

时间:2015-07-29 21:09:38

标签: javascript ruby-on-rails ruby ruby-on-rails-4 html-safe

我在控制器中声明了一个我需要在js文件中使用的字符串数组。这是我的代码:

#controller
@cars = current_user.cars.completed.collect{|c| c.name.titleize }
puts "#{@cars.inspect}"

puts返回:

["Presentation 2", "Presentation 1"]

我现在需要在javascript中使用数组,所以我这样做:

//javascript
var lineChartData = {
    labels : <%= @cars %> 
}

javascript无法正常工作,因为浏览器正在将其读取为:

//javascruot
var lineChartData = {
    labels : [&quot;Presentation 2&quot;, &quot;Presentation 1&quot;], 
}

我尝试过这样使用html_safe

#controller
@cars = current_user.cars.completed.collect{|c| c.name.titleize.html_safe }
puts "#{@cars.inspect}"

但没有效果。如何让报价正常工作?

3 个答案:

答案 0 :(得分:1)

我会使用to_json

//javascript
var lineChartData = {
    labels : <%== @cars.to_json %> 
}

答案 1 :(得分:0)

虽然我没有建议使用OutputSafetyHelper#raw工程直接将Ruby变量注入JavaScript:

//javascript
var lineChartData = {
  labels : <%= raw @cars %> 
}

我建议将这些字符串嵌入到HTML中并使用JavaScript获取它们。

答案 2 :(得分:0)

您似乎正在使用ERB生成JS视图。我建议不要将ERB与JS混合使用。尝试使用像Gon这样的工具,它允许您将变量设置到控制器中的Ruby对象上,并允许您使用Javascript对象引用JS中的数据。这种方法的优点是你可以编写纯JS并将其保存在assets目录中。然后你可以利用资产管道:最小化,丑化,咖啡脚本等。资产目录中的纯JS也更容易使用像Jasmine这样的JS测试框架进行测试。