我有兴趣在我的Rails应用中使用jQuery UI autocomplete plugin。可能值的数量很小,所以我想将它们存储在客户端。所以我的控制器设置如下:
def index
@tags = Tag.find(:all).map { |t| t.name }
end
在我看来:
var tags = <%= @tags %>
问题是这会呈现为:
var tags = ["tag1","tag2"];
而不是:
var tags = ["tag1","tag2"]
为了停止在我的标记数组中转义那些引号,我需要做些什么?
答案 0 :(得分:0)
怎么样:
var tags = <%=raw @tags %>;
编辑:
控制器中的
@tags = Tag.find(:all).map(&:name).to_json
在您看来:
var tags = <%= @tags %>;
它与您提供的内容相同,但您确定它有效并且确定(因为已转义)json(+查询已得到改进)。
我还在质疑XSS + raw ......
答案 1 :(得分:0)
我能够通过将我的视图代码更改为:
来解决此问题<%= array_or_string_for_javascript(@tags) %>
答案 2 :(得分:-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>