Отображение переменной с помощью автозаполнения в ruby ​​на рельсах - PullRequest
1 голос
/ 15 августа 2011

Попытка отобразить список, отфильтрованный по «термину» в автозаполнении

У меня есть приложение rails 3, которое использует функцию автозаполнения jquery-ui. Я достиг точки, где вы можете искать список пользователей. Однако, когда я набираю первые несколько букв указанного пользователя, появляется весь список (не уверен, является ли это проблемой с моим Javascript или project_list внутри контроллера), когда должен появиться только один пользователь. Но я не хочу этого делать. Насколько я понимаю, я должен взять var term и отфильтровать по нему свой список, однако я не знаю, как именно это сделать, код ниже.

Контроллер пользователя. 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);



            }

        });

    }

});

}

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Все пользователи загружаются в ваш контроллер, вызывая User.all, вместо этого вы должны передать параметр в ваш контроллер и затем выполнить выбор.

1 голос
/ 15 августа 2011

Я мог бы что-то пропустить, но

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

должно быть достаточно для этого. Теперь я никогда не делал ruby, но кажется, что в вашей функции ruby ​​вы никогда не читаете «термин», переданный ajax как параметр, и никогда не фильтруете свой результат с ним. я предполагаю, что вы должны фильтровать что-то вроде этого: list.grep (/ params [: term] /). (ps: опять извините, я никогда не делал никакого рубина ...)

...