2015-06-03 65 views
2

我已成功使用這種寶石創建形式:https://github.com/bigtunacan/rails-jquery-autocomplete使用額外的搜索欄與導軌,jQuery的自動完成

的問題是,我想它不僅源表的字段進行過濾。爲此,我嘗試使用:字段屬性,如gem的文檔中所述。但是呈現的SQL仍然只包含名稱的過濾,儘管GET請求包含添加的字段。

<%= f.autocomplete_field :name, autocomplete_ad_user_name_component_associated_users_path(@component), 
           :update_elements => {:username => '#associated_user_username', 
            :password => '#associated_user_password'}, 
            :fields => {:client_id => '#client_id'}, 
            class: 'form-control' %> 

我是否需要爲此創建自定義自動完成功能?也許我只需要編輯默認創建的函數,但我可以在哪裏找到它?

回答

1

您需要定義自定義自動填充方法。

這應該覆蓋get_autocomplete_items方法。將ActiveRecord結果轉換爲OpenStruct也是關鍵。我在下面包含了一個示例。

def get_autocomplete_items(parameters) 
    result_set = TableName.search do 
     fulltext parameters[:term] do 
     fields (:first_name) 
     fields (:middle_name) 
     fields (:last_name) 
     end 
     order_by (:last_name) 
     paginate page: 1, per_page: parameters[:options][:limit]+1 
    end.results 

    new_result_set = [] 
    hash = {} 

    # Translating the ActiveRecord object into an OpenStruct is necessary for the rails-jquery-autocomplete 
    # Trying to use the ActiveRecord model result directly will result in horrible pain and suffering. 
    result_set.each do |r| 
     h = {} 
     h[:id] = r.id 
     h[:email] = r.email_address 
     unless hash[r.email] 
     new_result_set << OpenStruct.new(h) 
     hash[r.email] = true 
     end 
    end 

    if new_result_set.empty? 
     new_result_set << OpenStruct.new(:email => 'No Match, Search again') 
    elsif(result_set.count > parameters[:options][:limit]) 
     new_result_set << OpenStruct.new(:email => 'Too many results, type more characters') 
    end 
    new_result_set 
    end