在 script 脚本中,我是这样定义的:
var user = <%= User.where(state: "封禁").pluck(:name) %>;
调式结果是:
var user = ["滴酒醉", "打工走天下"];
很明显”被转义成 " 了,使用 raw 和 html_safe 倒可以解决,但这种做法又关闭了安全过滤,存在安全隐患,有没有更完美的解决方案???
两个做法应该都是不正确的。
你这里是在把 Ruby 数组转换成 JavaScript 数据,那么很显然你需要一个到 JavaScript 的转换器,也就意味着你需要……
to_json.
to_json
不建议在 js 里面直接使用 erb 得到数据,这样做太多不可预见的坑,把逻辑整理得简单点会更 reliable
而且不建议在 view 进行数据库操作
@msg7086
额,使用 to_json 后还是解决不了,在 erb 转化成 html 后被转义为:
var user = [/"滴酒醉/", /"打工走天下/"];
不过换了种方式解决了:
在 controller 中,将查询的到的数组连成字符串:
@users = User.where(state: "封禁").pluck(:name).join("|")
在 view 中,用 js 将得到的字符串分解成数组:
var users = (<%= @users %>).split("|")
可以得到正确数据
["滴酒醉", "打工走天下"]
@leiz_me @winse
这样可以吗?
to_json.html_safe
有个 escape_javascript 方法的
escape_javascript
我记得 Rei 有发过这个经验帖 https://ruby-china.org/topics/16633
@doitian escape_javascript 这个方法实现不了楼主的需求 例如,我现在就需要将 "A 股第四次闯关 MSCI 成功&呵呵哒" 这样一个字符串的值赋值给一个 JS 的变量,首先采用 escape_javascript 实现不了,字符串里面的"&"符号任然被转义写成"&",目前只能采用的方法是 raw,我没有查到更好的方法,如果哪位大侠知道,还请告知一下。 @mapana ,这个帖子说的东西貌似和这个问题是相反的~~~
@qq2729877005 @uestc_bird
rails 的默认行为是转义,如果你想输出富文本,又想保证安全,用 sanitize !
你可以再看一下这个帖子:https://ruby-china.org/topics/16633 我在后面有追加提问。