Rails中的简单搜索表单错误

时间:2013-04-06 05:16:26

标签: ruby-on-rails ruby ruby-on-rails-3

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

我的观点有这样的形式:

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

现在,每当我尝试运行搜索时,都会收到此错误:

关键字控制器#show中的ActiveRecord :: RecordNotFound 找不到关键字id = search

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

3 个答案:

答案 0 :(得分:0)

在你的keyword.rb

替换

 @keyword = Keyword.find_all_by_content(search)  

用,

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

答案 1 :(得分:0)

我认为您尚未添加search行动的路线。您可以按如下方式添加搜索路线:

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

答案 2 :(得分: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