html_safe 在 rails 到 javascript 中不工作

html_safe is not working in rails to javascript

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

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

puts returns:

["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}"

但是没有效果。如何让引号正常工作?

我会用 to_json:

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

尽管我不建议直接使用 OutputSafetyHelper#raw 将 Ruby 变量注入 JavaScript:

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

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

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