如果说,在home_controller.rb里的index方法中定义了
@data = {a: 1, b: 2}
那么通过<%= @data %>传到前端的js会解析成
var arr = <%= @data %>
# var arr = {:a=>1, :b=>2}
var arr = <%= raw @data %>
# var arr = {:a=>1, :b=>2}
然后呢,你尝试在index那个action里用
@data = {"a": 1, "b": 2}这么定义
觉得会把:a变成"a",:b变成"b"
实际上呢 ???
var arr = <%= raw @data %>
# 解析出来的依旧是这个 var arr = {:a=>1, :b=>2}
这时候咱们就用下gem "activesupport"里提供的stringify_keys这个方法
var arr = <%= raw @data.stringify_keys %>
# var arr = {"a"=>1, "b"=>2}
var arr = <%= raw @data.stringify_keys.to_json %>
# var arr = {"a":1,"b":2}
一切都正常了