2012-03-02 53 views
3

我已經堅持了幾天。我一直在使用#102修訂版作爲模板。Rails 3.2.1 jquery自動完成

最終,我計劃在頂部菜單欄中使用ajax來查詢兩個獨立模型的名稱字段,它使用jquery-ui自動完成,當點擊鏈接直接鏈接到所選搜索結果的顯示操作時。

但我還沒有,現在我只是想讓自動完成與單一模型一起工作。下面是我有:

-Opportunity模型,尋找落NAME屬性

-Search控制器

def index 
    @opportunities = Opportunity.order(:name).where("name like ?", "#{params[:term]}") 
    render json: @opportunities.map(&:name) 
end 

Search.js.coffee

jQuery -> 
    $('#search').autocomplete 
    source: $('#search').data('autocomplete-source') 

搜索視圖(/應用/ views/layouts/application.html.erb:

<%= text_field_tag 'search', nil, :class => 'search-query ui-autocomplete-input', :placeholder => 'Search', data: {autocomplete_source: search_path} %> 

當我運行這段代碼時,當我在搜索框中鍵入字母(讓我們假設我輸入字母B)時,我得到:
對於127.0.0.1,在2012-03-12開始GET「/ search?term = b」 01 15:17:40 -0800
通過SearchController處理#索引爲JSON
參數:{「term」=>「b」}
機會負載(0.3ms)SELECT「opportunities」。* FROM「opportunities」WHERE (像'b'這樣的名字)ORDER BY opportunities.name,name
在1ms內完成200 OK(查看:0.1ms | ActiveRecord:0.3ms)

我現在預計會發生的情況是自動完成將使用B,選擇模型中的所有名稱,然後將它們放在自動完成中,相反,我什麼也沒得到,沒有任何反應。

如果我調整我有以下看法:

<%= text_field_tag 'search', nil, :class => 'search-query ui-autocomplete-input', :placeholder => 'Search', data: {autocomplete_source: @opportunities.map(&:name)} %> 

然後自動完成的工作,但與搜索欄的每個頁面將加載所有的搜索字詞到客戶端。由於可能有數千個名稱,我不想加載所有這些數據,所以我希望ajax調用可以針對數據庫實時生效,並相應地調整視圖。

我是新的鐵軌,所以我敢肯定我在這裏犯了一個愚蠢的錯誤。任何幫助將非常感激。

謝謝

回答

1

看來,你是不是把任何外卡在你喜歡的語句

@opportunities = Opportunity.order(:name).where("name like ?", "#{params[:term]}") 

應該

@opportunities = Opportunity.order(:name).where("name like ?", "%#{params[:term]}%") 

這涉及到另一個問題: How to search for a text with Active Record in Ruby on Rails 3?

+0

非常感謝,那正是問題所在。哇,我想我盯着代碼很長的路。 – 2012-03-06 16:00:28