erb代码在javascript <script>标记</script>中不起作用

时间:2013-06-11 11:34:44

标签: javascript ruby-on-rails ruby-on-rails-3 erb

我有Post表格,其中包含标题和内容属性。我想制作自动完整的文本字段,其中用户是由帖子标题建议的。我想在我的rails应用程序中添加jquery auto-complete。我这样做..

controller(在数组中添加帖子标题) -

  @posttitle = []
  Post.all.each do |g|
    @posttitle << g.title 
  end

查看 -

  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

  <%= text_field_tag :search, params[:search], :placeholder => "Search Religious Places...", :id=>"tags" %>

 <script>
   $(function() {
   var availableTags = <%= @posttitle %>;
   $( "#tags" ).autocomplete({
   source: availableTags
   });
   });
 </script>

但它没有显示任何建议(自动完成不起作用)。我不知道什么是错的。请帮忙

4 个答案:

答案 0 :(得分:7)

你有没有试过这样的事情:

<script>
   var availableTags = <%= raw @posttitle %>;
   $(function() {

        $( "#tags" ).autocomplete({
         source: availableTags
        });
   });
</script>

答案 1 :(得分:1)

如果你想让Ruby中的一个项目数组显示为一个javascript数组,你需要:

1)将其放入以逗号分隔的值列表中 2)用引号包装每个值 3)转义值,使引号不会导致javascript错误

如果您只想要标题:

控制器:

@titles = Post.pluck(:title)

然后在你看来:

 <script>
   $(function() {
     var availableTags = [<%= @titles.map{|title| escape_javascript(title)}.join(", ") %>];
     $( "#tags" ).autocomplete({
       source: availableTags
     });
   });
 </script>

答案 2 :(得分:0)

答案 3 :(得分:0)

我认为你不应该在javascript中使用ruby数组。它不会被评估为数组。相反,您可以创建javascript数组并将其用作

<script>
  $(function() {
    var availableTags = new Array();
    <% @posttitle.each do |post| %>
      availableTags.push(<%= post %>);
    <% end %>
    $( "#tags" ).autocomplete({
      source: availableTags
    });
  });
</script>