2011-04-20 79 views
-1

我有興趣在我的Rails應用中使用jQuery UI autocomplete plugin。可能的值數量很小,所以我想將它們存儲在客戶端。所以,我有我的控制器設置如下:在Rails應用中使用jQuery UI自動完成插件

def index 
    @tags = Tag.find(:all).map { |t| t.name } 
end 

在我看來:

var tags = <%= @tags %> 

的問題是,這將呈現爲:

var tags = [&quot;tag1&quot;,&quot;tag2&quot;]; 

相反的:

var tags = ["tag1","tag2"] 

我需要做什麼不同的是爲了避免逃避我的標籤數組內的引號?

回答

0

我能夠解決此問題的方法是將我的查看代碼更改爲:

<%= array_or_string_for_javascript(@tags) %> 
0

什麼:

var tags = <%=raw @tags %>; 

編輯:

在控制器

@tags = Tag.find(:all).map(&:name).to_json 
在你看來

var tags = <%= @tags %>; 

這是一樣的,你提出了什麼,但你'確定它是有效的並肯定(因爲轉義)JSON(+查詢改進)。

我還在質疑關於XSS +生...

+0

這有效,但不會創建XSS漏洞? – 2011-04-20 20:07:11

+0

剛剛編輯我的答案 – apneadiving 2011-04-20 21:31:33

+0

我試過你的最新答案,它仍然呈現與報價逃脫... – 2011-04-21 00:07:39

-1

的事情在你的控制器缺少的是html_safe - 這裏有一個例子:

控制器

@keys = @categories.map { |x| x.name } 
@autocomplete_categories = @keys.to_json.html_safe 

視圖:

<script type="text/javascript"> 
$(document).ready(function() { 
    var data = <%= @autocomplete_categories %>; 
    $("#auto").autocomplete({ source: data }); 
}); 
</script> 
+0

這與使用'原始'相同的效果,但我仍然想知道如果它不打開XSS攻擊 – apneadiving 2011-04-20 20:53:59