2012-11-20 212 views
4

我想在我的rails應用程序中使用select2,但無法獲得顯示在我的視圖中的結果。我看到正確的JSON來在鉻控制檯,但無法得到結果顯示在下拉列表中...Select2 with Rails and JSON

你能幫我嗎?

感謝:

控制器:

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) } 
    end 
    respond_to do |format| 
    format.html 
    format.json { render :json =>{:results => @users.to_json(only: [:id, :first_name, :last_name]) }} 
    end 
end 

我的javascript:

$("#teen_search").select2({ 
    placeholder: "Search for a teen", 
    minimumInputLength: 2, 
    ajax: { 
    url: "/friends.json", 
    dataType:'json', 
    data: function (search, page) { 
     return { 
     term: search, // search term 
     page_limit: 10, 
     }; 
    }, 

    results: function (data, page) { 
     return data; 
    } 
    }, 
    dropdownCssClass: "bigdrop" 
}); 

我找不出什麼是錯的,感謝您的幫助

我剛纔編輯控制器render_to JSON我知道js中的結果修復了Chrome控制檯中的錯誤我很接近,但仍然無法讓我的用戶first_name和last_name顯示在字段中...

+0

什麼意思你沒有得到正確的結果? – Lichtamberg

+0

沒有顯示在框中,只有文本搜索,但我看到一個JSON文件與我的Chrome控制檯中的數據 –

+0

好吧,所以我認爲現在的問題是與JSON,選擇2要求如果我是正確的得到一個JSON與ID和文本,沒有別的我怎麼能這樣做?我想在select2示例中顯示我的select2框,就像moviebox中的圖片和文字謝謝! –

回答

4

所以我落得這樣做是:

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 

在JS腳本:

$(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" // apply css that makes the dropdown taller 
    }); 
}); 

而且formatResult和formatSelection配置像您加載腳本之前:

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); 
} 

而且在視圖:

<input type ="hidden" id="teens_select2"></input> 

我真的希望它是有用的。

2

只需在dataType屬性中通過'json'更改'jsonp'即可。

+0

嗯,我做了測試,並在鉻控制檯中有一個錯誤:Uncaught TypeError:無法讀取未定義的屬性'長度',但我也在結果函數中添加了一個console.log(數據),我確實看到了我的對象。 ..感謝它仍然沒有工作,但似乎是在一個很好的方式 –

+0

我修正了我相信控制器的另一部分和問題的JS,但仍然無法得到答案,但搜索現在消失,所以我相信我很接近。 .. –