如何在erb中安全地呈现URI

时间:2014-08-04 13:08:47

标签: javascript ruby-on-rails url erb

我尝试了各种转义和取消转换选项,但不明白为什么我的erb无法正常呈现。

我有以下格式的标准图片网址:

 https://i.ytimg.com/vi/pB-5XG-DbAA/hqdefault.jpg;

按以下方式进入我的控制器:

@whats_hot_last_vid = @whats_hot_last.video.picture

当我尝试在我的js.erb文件中渲染它时:

var lastsongImg = <%= @whats_hot_last_vid %>;

以下是它的呈现方式:

var lastsongImg = https://i.ytimg.com/vi/pB-5XG-DbAA/hqdefault.jpg;

从我所看到的,它在http地址中呈现'//'作为JS注释的开头,导致出现各种错误,如

Uncaught SyntaxError: Unexpected token :

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你必须在字符串周围加上引号,比如

var lastsongImg = "<%= @whats_hot_last_vid %>";

希望有帮助=)

答案 1 :(得分:2)

在erb中的js块中处理这样的变量的最佳方法是使用.to_json。这适用于字符串,数组和散列(它将转换为json对象)。基本上它是&#34;正确的东西&#34;,你不必担心在它周围包装额外的格式,这取决于它是什么类型的对象。

//string
var lastsongImg = <%= @whats_hot_last_vid.to_json %>;
// => var lastsongImg = "https://i.ytimg.com/vi/pB-5XG-DbAA/hqdefault.jpg";

//arrays
<% myArray = [1, "abc", 1.6] %>;
var myArrayJs = <%= myArray.to_json %>;
// => var myArrayJs = [1, "abc", 1.6];

//hashes
<% myHash = {:foo => "bar", :chunky => "bacon"} %>;
var myObject = <%= myHash.to_json %>;
// => var myObject = {"chunky":"bacon","foo":"bar"};
编辑:作为附注,ActiveRecord对象也有to_js方法,并生成如下对象:

{"car":{"id":123 "color":"red", "make":"Ford", "model": "Mondeo"}}

如果需要,您当然可以为特定型号覆盖此内容。