在Rails应用程序中使用jQuery UI自动完成插件

时间:2011-04-20 19:56:38

标签: javascript ruby-on-rails autocomplete

我有兴趣在我的Rails应用中使用jQuery UI autocomplete plugin。可能值的数量很小,所以我想将它们存储在客户端。所以我的控制器设置如下:

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"] 

为了停止在我的标记数组中转义那些引号,我需要做些什么?

3 个答案:

答案 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>