So I finished this:
User_Controller:
def friends if params[:term] @users = User.where{ ( (first_name =~ my{"%#{params[:term]}%"}) | (last_name =~ my{"%#{params[:term]}%"}) | ( ((first_name.op('||', ' ')).op('||',last_name)) =~ my{"%#{params[:term]}%"}) | ( ((last_name.op('||', ' ')).op('||',first_name)) =~ my{"%#{params[:term]}%"}) ) & ( adult==false ) }.select("id,first_name,last_name,avatar,uid") @user = @users.paginate(:page => params[:page], :per_page => params[:page_limit]) end respond_to do |format| format.html format.json { render :json => { :users => @user, :total => @users.count, :links => { :self => @user.current_page , :next => @user.next_page} } } end end
In JS Script:
$(document).ready(function() { $("#teens_select2").select2({ placeholder: "Search for a teen", minimumInputLength: 1, ajax: { url: "/friends.json", dataType: 'json', quietMillis: 300, data: function (search, page) { return { term: search, page_limit: 10, page: page, }; }, results: function (data, page) { var more = (page * 10) < data.total; return {results: data.users, more: more}; } }, formatResult: movieFormatResult, formatSelection: movieFormatSelection, dropdownCssClass: "bigdrop"
Also, the Result format and formatSelection are configured so that before loading the Script:
function movieFormatResult(user) { var markup = "<table class='movie-result'><tr>"; if ( user.uid !== null) { markup += "<td class='movie-image'><img src='" + user.avatar + "'/></td>"; } else if (user.uid == null) { var gravatar = user.avatar + 40 markup += "<td class='movie-image'><img src='" + gravatar + "'/></td>"; } markup += "<td class='movie-info'><div class='movie-title'>" + user.first_name +' '+ user.last_name + "</div>"; markup += "</td></tr></table>" return markup; } function movieFormatSelection(user) { return (user.first_name + ' ' + user.last_name); }
And in the view:
<input type ="hidden" id="teens_select2"></input>
I really hope this can be helpful.