将参数传递给控制器​​ - 自动完成

时间:2011-08-16 12:49:45

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

拥有一个应该显示产品/经理列表的rails应用程序。在搜索了高低之后,我得到了响应,发现我需要将一个paremeter传递到包含该列表的控制器中。

    def manager_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

Javascript

 $.ajax({
            url: "/managerlist",
            dataType: "json",
            data: {
                style: "full",
                maxRows: 12,
                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);

我对ruby和javascript的了解并不是最高的。但是我知道以下列表= User.all.map。收集所有用户full_name并连接它。几个小时以来我一直试图弄清楚如何将var'term'作为参数准确地传递给我的用户控制器。因此,当我运行rails应用程序并搜索特定的经理或产品时,它将显示单个记录而不是整个列表。

2 个答案:

答案 0 :(得分:1)

因为,您正在尝试实现自动完成功能,我假设您搜索以给定模式开头的名称。

控制器看起来像这样:

def manager_list  
  matching_users = User.where(['full_name like ?', "#{params[:term]}%"])
  matching_names = [].concat(matching_users.map(&:full_name).sort{|a,b| a[0]<=> b[0]}).to_json
  render :json => matching_names 
end

另外,term: request.term对我来说听起来不对。我不确定,您从UI中获取搜索词的位置。请验证。

答案 1 :(得分:0)

你在Controller内的manager_list方法吗?

以下是您的控制器的外观:

class UserController < ActionController::Base

  def manager_list
    var term = params[:term]
    ... // work with your parameter
  end
end

如果你只能从这得到1个结果......我会将它重命名为getManager,因为你不会得到一个列表。

如果term是用户模型中的字段,则可以调用动态查找器!! 像这样的东西:

User.find_by_term!(term)

希望我回答你的问题!

此致