2011-10-19 39 views
0

我有一個搜索表單在我的應用程序佈局類似下面的搜索行動:應該如何從形式參數傳遞給在軌

%li 
      %form{:method => 'get' , :action => :search } 
       %input{:type=>'text',:length => "10"} 
       %input{:type=>'submit' , :value => 'search'} 

,我必須創建一個名爲我的索引控制器內搜索類似下面的操作:

def search 
    @item = Item.search params[:search] 
end 

但是當我按下「搜索」按鈕,我不會從Rails的服務器的任何合適的回答所有我得到的是:

路由錯誤

沒有路由匹配[GET] 「/搜索」

,這是我route.rb

match "/search/:search" => "items#search" 

post "items/:id/like" => "items#like" 


resources :items do 
    put :like, :on => :member 
end 

    resources :items do 
     resources :comments 
    end 

    resources :comments 

# root :to => 'items#index' 
    root :to => 'items#list' 

    match ':controller(/:action(/:id(.:format)))' 

和我的網址是這樣打 「搜索」 按鈕後:

http://0.0.0.0:3000/search 

----------------- update -------------------------

如果

和我說:

http://0.0.0.0:3000/search/criteria 

,將工作

-----------------結束更新---------- ---------------

我猜想問題是從形式傳遞參數到適當的動作。因爲如果我手動調用上述網址,並且只是在其中添加搜索條件,它將完美地工作,但沒有形式的機會!

我該怎麼辦?

回答

0

您不需要:搜索部分。 GET或POST到服務器的參數不是需要匹配的url塊,它們總是在params散列中可用。

match '/search' => "index#search" 

編輯

這不是標準要構建的URL你正在做的方式。表格生成的標準將採用格式「?thing = value」not/value。嘗試以這種格式自己發送標準。

如果你想處理/搜索/:標準,那麼這將使得「搜索」變量可以在你的控制器(未在PARAMS [:搜索]哈希)

match "/search/:search" => "items#search" 
+0

,如果我做你的方式說我會得到另一個錯誤:「ItemsError在ItemsController#搜索」,即使我直接傳遞參數,我會得到另一個錯誤:「路由錯誤」 –

+0

typeError與路由無關。嘗試打印params.inspect或使用調試器來查看搜索功能中的錯誤 – spike

+0

即使我手動爲搜索操作提供條件,也會出錯,這意味着路由有問題或者您有任何想法請寫在這裏因爲我認真沒有任何其他的想法。 –

相關問題