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::KeywordsController#show の RecordNotFound ID=search のキーワードが見つかりませんでした

私が理解していることから、何かが show メソッドを台無しにしていますが、その理由や修正方法がわかりません。どんな助けでも大歓迎です。

4

3 に答える 3

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 に答える
0

あなたのkeyword.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 に答える