2014-12-03 68 views
0

我正在嘗試實現用戶查找其他用戶的簡單搜索表單。我一直在網上查找相當一段時間,但很多資源似乎是過時的,無論是3號軌道還是退役的寶石...rails 4簡單的搜索表單,供用戶查找對方

任何人都可以指向我最近的rails 4資源進行簡單的搜索或顯示我的骨架代碼開始?先謝謝你!

回答

1

https://github.com/jhund/filterrific

scope :search_query, lambda { |query| 
    return nil if query.blank? 

    terms = query.to_s.downcase.split(/\s+/) 

    # replace "*" with "%" for wildcard searches, 
    # append '%', remove duplicate '%'s 
    terms = terms.map { |e| 
    (e.gsub('*', '%') + '%').gsub(/%+/, '%') 
    } 

    # configure number of OR conditions for provision 
    # of interpolation arguments. Adjust this if you 
    # change the number of OR conditions. 
    num_or_conds = 2 
    sql = "(LOWER(foo.first_name) LIKE ? OR LOWER(foo.last_name LIKE ?)" 

    where(
    terms.map { |term| sql }.join(' AND '), *terms.map { |e| [e] * num_or_conds }.flatten 
) 
} 

這將是由任一first_name的或姓氏搜索用戶的一個簡單的例子。 Filterrific是相當不錯的,但如果您有多條記錄,則可以在查詢時執行查詢。

+0

Vlad SQL中存在語法錯誤。在'foo.last_name' - 'sql =「(LOWER(foo.first_name)LIKE?或LOWER(foo.last_name)LIKE?)?之後缺少一個大括號?」「 - 我嘗試添加它,但編輯時需要6個以上的字符。 ' – Brett 2016-08-18 18:30:12

0

對用戶的一個非常簡單的搜索用戶名,你可以在你的觀點做:

<%= form_tag users_path, :method => 'get', :id => 'users_search' do %> 
    <p> 
     <%= text_field_tag :search, params[:search] %> 
     <%= submit_tag "Search", :name => nil %> 
    </p> 
<% end %> 

在您的用戶模型,你必須定義一個「搜索」的方法:

#users_controller.rb 
def self.search(user_name) 
    if user_name 
     user_name.downcase! 
     where('LOWER(name) LIKE ?', "%#{user_name}%") 
    else 
     all 
    end 
end 

最後是你的控制器,你可以調用這個方法:

def index 
    @users = User.search(params[:search]) 
end 

途徑可以被定義爲像您的默認RO一個GET ute爲頁面:

#routes.rb 
resources :users