2013-04-06 29 views
0

我試圖實現一個簡單的搜索表單,用於搜索數據庫中正在搜索內容的關鍵字。Rails中的簡單搜索表單錯誤

我的觀點有以下形式:

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

我的控制器具有下列:

def search 
    @keywords = Keyword.search(params[:search]) 
end 

def show 
    @keyword = Keyword.find(params[:id]) 
    respond_to do |format| 
    format.html # show.html.erb 
    format.json { render json: @keyword } 
    end 
end 

型號keyword.rb:

def self.search(search) 
    if search 
    Rails.logger.debug("debug::Searching for" + search) 
    @keyword = Keyword.find_all_by_content(search) 
    end 
end 

現在,每當我試圖運行搜索我得到這個錯誤:

ActiveRecord :: RecordNotFound在KeywordsController#show 找不到關鍵字id =搜索

現在從我的理解,東西是搞亂了show方法,但我不明白爲什麼或如何解決它。任何幫助,將不勝感激。

+0

點擊'submit_tag'後,請檢查您的參數傳遞到服務器。如果你在這裏發佈 – Raghuveer 2013-04-06 05:21:56

+0

「utf8」=>「✓」, 「search」=>「aaa」, 「id」=>「搜索」 – NumberOfGraham 2013-04-06 05:50:50

+0

您是否爲'search'添加了路線?你能顯示你的「路線」嗎? – codeit 2013-04-06 06:06:15

回答

0

我想你沒有爲search動作添加的路由。您可以爲搜索添加路由如下:

resources :keywords do 
    collection do 
    get 'search' 
    end 
end 
+0

我的路由設置與您發佈時一樣。 – NumberOfGraham 2013-04-06 08:08:07

0

在你keyword.rb

更換

@keyword = Keyword.find_all_by_content(search) 

有了,

@keyword = Keyword.find_all_by_content("#{search}") 
+0

這會產生相同的錯誤 – NumberOfGraham 2013-04-06 05:51:22

0

如果你想使用你需要的方式來使用find()方法的搜索功能它會引發異常,就是通過你要查找的ID。

def show 
     begin 
      @keyword = Keyword.find(params[:id]) 
      respond_to do |format| 
      format.html # show.html.erb 
      format.json { render json: @keyword } 
      end 
     rescue ActiveRecord::RecordNotFound 
      flash[:notice] = "Wrong keyword" 
      redirect_to :action => 'index' 
     end 
    end 
+0

如果在給定的鏈接文檔中沒有找到記錄,則返回nil:(鏈接)[documentationhttp://api.rubyonrails.org/classes/ActiveRecord/Base.html] – 2013-04-06 06:32:28