Ruby on rails 在某些情况下,rails控制台中的字符串以带反斜杠的return开头
在rails 4.2.7的控制台中,我进行了以下测试:Ruby on rails 在某些情况下,rails控制台中的字符串以带反斜杠的return开头,ruby-on-rails,ruby,Ruby On Rails,Ruby,在rails 4.2.7的控制台中,我进行了以下测试: [45] pry(main)> '#$' => "\#$" [46] pry(main)> '#@' => "\#@" [47] pry(main)> '#!' => "#!" [48] pry(main)> '#ab' => "#ab" 似乎只有当后面有@或$时,rails才会将\放在字符串前面 导致我进行此测试的问题是,我有一个erb文件,该文件使用json数组呈现数据属性: data-
[45] pry(main)> '#$'
=> "\#$"
[46] pry(main)> '#@'
=> "\#@"
[47] pry(main)> '#!'
=> "#!"
[48] pry(main)> '#ab'
=> "#ab"
似乎只有当后面有@或$时,rails才会将\放在字符串前面
导致我进行此测试的问题是,我有一个erb文件,该文件使用json数组呈现数据属性:
data-xx="<%= [{xx: '#$', yy: 'yy'}.to_json, {zz: 'zzz'}.to_json] %>"
当我改变xx值时!或其他字符串,则结果将作为数组显示
$("#entry_show_modal_template").data('xx')
["{"xx":"#!","yy":"yy"}", "{"zz":"zzz"}"]
有人知道这是不是真的,为什么会有这样的区别吗?
有什么办法解决这个问题吗?这不是真的
在{…}中,哈希也将被转义。这样做是为了防止递归/隐式字符串插值
看:
ruby已经为您解决了这个问题。只需按原样使用生成的字符串,不要被控制台中打印出来的方式所愚弄
@mudasobwa的解释是正确的 根据你的情况,你应该这样做 =>在rails控制台中
json_values = [{xx: '#$', yy: 'yy'}, {zz: 'zzz'}].to_json
=>在chrome控制台中
result = JSON.parse(json_values)
在ruby控制台aa=[{xx:'$',yy:'yy'},{zz:'zzz'}]中,您将得到预期的数组,它只是处理字符串插值的ruby技术。在chrome控制台json.parseaa中,您将得到预期的数组,它只是处理字符串插值的ruby方法tanks@WishZone。你是对的。只要把json放到数组中就可以解决这个问题。太好了!!刚刚添加了答案,请将其标记为已解决“将json放入数组将解决问题”-错误。没有问题,因此to_json无法解决任何问题。@mudasobwa是的,没有这样的问题,但他正在尝试获得预期的结果,他将以这种方式获得,您的解释是正确的
"\#$".length
#⇒ 2
"\#$" == '#$'
#⇒ true
"\#$"[0]
#⇒ "#"
json_values = [{xx: '#$', yy: 'yy'}, {zz: 'zzz'}].to_json
result = JSON.parse(json_values)