如何将参数从表单传递到rails中的搜索操作

时间:2011-10-19 17:38:39

标签: ruby-on-rails-3

我的应用程序布局中有一个搜索表单,如下所示:

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

我在索引控制器中创建了一个名为search的操作,如下所示:

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

但是当我按下“搜索”按钮时,我将无法从Rails服务器得到任何正确的答案,我将得到的是:

  

路由错误

     

没有路线匹配[GET]“/ search”

这是我的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

-----------------更新-------------------------

如果我说:

http://0.0.0.0:3000/search/criteria

它会起作用

-----------------结束更新-------------------------

我想问题是将参数从表单传递给适当的操作。因为如果我手动调用上面的URL并且我只是在其中设置搜索条件,它将完美地工作,但形式没有机会!

我该怎么办?

1 个答案:

答案 0 :(得分:0)

您不需要:搜索部分。对服务器进行GET或POST的参数不是需要匹配的url块,它们始终在params散列中可用。

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

修改

想要按照您的方式构建URL并不标准。表单生成的标准格式为“?thing = value”not / value。尝试以该格式自行发送标准。

如果你想处理/ search /:criteria然后这会使你的控制器中的“搜索”变量可用(不在params [:search]哈希)

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