Думаю, вы, вероятно, ищете что-то вроде этого:
def project_list
list=Project.all.map{|i|[i.name,i.id]}
arr= [["No project",0]].concat(list.sort{|a,b| a[0]<=>b[0]}).to_json
render :json =>arr
end
Затем вам нужно вызвать этот метод изнутри js
$("#some_input_id").autocomplete({
source: function(request, response){
//pass request to server
$.ajax({
url: "/projects/project_list",
dataType: "json",
data: {
style: "full",
maxRows: 12,
term: request.term
},
success: function( data ) {
#do stuff here
}
});
});
Вот относительно полный пример тогопроизводит автозаполнение списка аэропортов
$("#airport, #station").autocomplete({
delay: 1000,
search: function(event,ui){
tag = event.target.id
},
source: function(request, response){
//pass request to server
$.ajax({
url: "/tags/"+ tag +"/list",
dataType: "json",
data: {
style: "full",
maxRows: 12,
term: request.term
},
success: function( data ) {
response( $.map( data, function( item ) {
if (tag == "airport"){
return {
label: item.airport.fd_name
}
}
else
{
return {
label: item.station.fd_name
}
}
}));
}
});
},
minLength: 2,
open: function( event, ui ) {
stripe($(this));
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
А вот соответствующий код контроллера:
def list
@tags= params[:tagclass].titleize.constantize.where("fd_name ilike ? ",params[:term]+"%").order('fd_name')
render :json => @tags.to_json(:only=>[:fd_code, :fd_name]), :layout=>false
end
`