我想使一個文本框,顯示按每個鍵入的字母排序的排序用戶列表。從那裏人可以將用戶添加爲協作者。當你在尋找新朋友的時候,結果應該就像Facebook的搜索功能一樣。當我按下某個鍵時,我在瀏覽器控制檯的網絡部分看到新的500內部服務器錯誤。下面是響應的一個片段:在內部服務器500與AJAX軸的錯誤
<h1>
NoMethodError
in CollaborationsController#collaboration_search
</h1>
</header>
<div id="container">
<h2>undefined method `[]' for nil:NilClass</h2>
所以我覺得Ajax是被炒到服務器,但也有一些是錯誤的控制器。這裏是我的視圖,視圖/協作/ _new.html.erb代碼:
<%= form_for [wiki, collaboration] do |f|%>
<div class = "col-md-8">
<div class = "form-group">
<%= f.label :user_name %>
<%= f.text_field :user_name, class: 'form-control', placeholder: "Enter name" %>
</div>
<div class = "form-group">
<%= f.submit class: 'btn btn-success' %>
</div>
</div>
<%= @users_by_name.to_a %>
</div>
</div>
</div>
<%end%>
其中上面的表單是部分。 AJAX的被寫入的javascripts/collaborations.js: $(文件)。就緒(函數() { //警報(1);
$('#collaboration_user_name').on('keyup', function() {
// text = $(this).val();
// alert(text);
$.ajax({ url: "/collaborations",
beforeSend: function(xhr) {
xhr.overrideMimeType("text/plain; charset=x-user-defined");
}
}).done(function(data) {
if(console && console.log) {
console.log("Sample of data:", data.slice(0, 100));
//alert()
}
});
});
});
這裏是協作控制器內的協作#search_collaboration動作:
def collaboration_search
name_search = params[:collaboration][:user_name].to_s
@users_by_name = User.where('name Like ?', "%#{params[:collaboration][:user_name]}%")
render json: @users_by_name.map do |user|
{ name: user.name, id: user.id}
end
末
而只是爲了測試目的我一直在我的合作/ search_collaboration.js.erb很簡單:
alert('hello');
但是,如果有人能指出我正確的方向,以便如何列出從collaboration_search操作返回的用戶名稱,我們將非常感謝!
這不是一個答案。它只是關於'jQuery'庫的鏈接。 – 2014-09-20 19:23:33
自學自動完成路線是學習的有用練習,但要注意讓所有用戶都可以使用它(例如依賴屏幕閱讀器的用戶),這是一項相當大的工作。如果您按照建議或其他方式選擇第三方小部件,例如曾使用Twitter Bootstrap發佈的[Typeahead.js](http://twitter.github.io/typeahead.js/),希望可訪問性詳細信息已被注意的。此外,至少應該瞭解HTML5的datalist元素(可惜[在所有瀏覽器中都不支持](http://beta.caniuse.com/#search=datalist))。 – 2014-09-21 10:57:14