2011-08-15 122 views
1

尝试在自动完成显示在轨道上

显示由“术语”过滤列表,使用自动完成在Ruby变种我有一个使用jQuery UI的自动完成功能的轨道3应用程序。我已经达到了可以搜索用户列表的地步。但是,当我键入指定用户的前几个字母时,出现整个列表(不知道这是否是我的Javascript或控制器内的project_list的问题),只有一个用户应该出现。但我不希望它这样做。从我的理解,我必须采取无功条件,并过滤我的清单,但我不知道该怎么做,下面的代码。

用户controller.rb

def project_list 
    list=User.all.map{|i|i.full_name} 
    arr= [].concat(list.sort{|a,b| a[0]<=>b[0]}).to_json 
    render :json =>arr 
end 

的application.js

$("#tags").autocomplete({ 

     minLength: 2, 

    source: function(request, response) { 

     $.ajax({ 

      url: "/managerlist", 

      dataType: "json", 

      data: { 

       term: request.term 

      }, 

      success: function(data) { 

       var results = []; 

       $.each(data, function(i, item) { 

        var itemToAdd = { 

         value: item, 

         label: item 

        }; 

        results.push(itemToAdd); 

       }); 

       return response(results); 



      } 

     }); 

    } 

}); 

} 

回答

1

所有的用户正在加载你的控制器调用User.all而不是你应该传递一个参数到你的控制器,然后,执行选择。

+0

如何传递一个参数并完成所有这些?我在这方面没有任何经验 – ahmet

+0

我建议你看看这个在rails3应用程序中非常棒的gem。 [https://github.com/crowdint/rails3-jquery-autocomplete](https://github.com/crowdint/rails3-jquery-autocomplete) –

1

我可能会错过一些东西,但

$("#tags").autocomplete({ 
minLength: 2, 
source: "/managerlist" 
}); 

应该够了。现在我从来没有做过任何红宝石,但似乎在你的ruby函数中,你从来没有读过由ajax作为参数发送的“term”,也从不过滤你的结果。我的猜测是,你应该过滤像这样的东西:list.grep(/ params [:term] /)。 (ps:再次抱歉,我从来没有做过任何红宝石...)