2014-10-17 101 views
0

我正試圖在Rails 4應用程序中創建一個搜索欄。我是我的用戶數據庫爲用戶的'名稱'和'電子郵件'列 - 我希望用戶能夠通過名稱或ID搜索其他用戶。Rails 4搜索欄

目前我得到這個:

ActiveRecord::RecordNotFound in UsersController#index 
Couldn't find all Users with 'id': (all, {:conditions=>["name LIKE ?", "%[email protected]%"]}) (found 0 results, but was looking for 2) 

有誰知道我做錯了嗎?我已經看過railscasts和一些論壇等,但目前無法通過這一點。

index.html.erb:

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

模型/ user.rb:

def self.search(search) 
    if search 
     find(:all, :conditions => ['name LIKE ?', "%#{search}%"]) 
    else 
     find(:all) 
    end 
    end 

users_controller.rb:

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

routes.rb中:

get  'search' =>  'users#index' 

回答

0

您在使用Rails 4? find(:all, ...)是做事的老辦法。現在只能找到ID。用途:

def self.search(search) 
    if search.present? 
    where('name LIKE ?', "%#{search}%") 
    else 
    where(true) 
    end 
end 

而且present?將測試對未繳和空白。請記住,LIKE可能會非常慢,具體取決於您的數據庫。

+0

這對我有效,謝謝@ jamesuriah! – sss333 2014-10-20 01:13:35

0

在rails中搜索

默認情況下,rails不支持全文搜索.Activerecord查找程序總是使用主鍵即ie找到一條記錄。 ID。 因此,我們需要在應用程序的寶石文件中的一些其他的寶石或類似太陽黑子,elasticsearch等應用..

我會告訴你用太陽黑子的Solr這裏..

只需添加以下代碼.. 。 。 寶石 'sunspot_rails'

group :development do 
    gem 'sunspot_solr' 
end 

和在終端使用 束安裝 導軌克sunspot_rails:安裝

這將增加的solr並創建配置/ sunspot.yml文件

耙太陽黑子:solr的:開始 rake太陽黑子:reindex

編輯user.rb lile在模型中 app/model/user.rb

Class User < ActiveRecord::Base 
    searchable do 
     text :name, :email 
    end 
end 
在app

/控制器/ users_controller.rb

,然後在指數函數

def index 
    @search = User.search do 
     fulltext params[:search] 
    end 

    @users = search.results 
end 

添加使窗體能夠在用戶輸入

<%= label_tag(:search, "Search for:") %> 
    <%= text_field_tag(:search) %> 
    <%= submit_tag("Search") %> 
<% end %> 
+0

你可以參考https://github.com/amriteshchandan/test_1 – amritesh 2014-10-17 09:00:41

+0

謝謝@amritesh!我正在尋找一種不涉及寶石的解決方案,雖然 – sss333 2014-10-20 01:13:13