0

我正在尝试实现一个简单的搜索表单,该表单在数据库中搜索其内容正在被搜索的关键字。

我的观点有这种形式:

<%= 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

模型关键字.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 in KeywordsController#show 找不到 id=search 的关键字

现在据我了解,有些东西弄乱了 show 方法,但我不明白为什么或如何解决它。任何帮助,将不胜感激。

4

3 回答 3

0

在您的关键字.rb

代替

 @keyword = Keyword.find_all_by_content(search)  

和,

 @keyword = Keyword.find_all_by_content("#{search}")
于 2013-04-06T05:45:35.743 回答
0

我认为你没有添加search行动路线。您可以按如下方式添加搜索路线:

resources :keywords do
  collection do
    get 'search'
  end
end
于 2013-04-06T06:10:22.157 回答
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
于 2013-04-06T06:26:29.120 回答