我的应用程序布局中有一个搜索表单,如下所示:
%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并且我只是在其中设置搜索条件,它将完美地工作,但形式没有机会!
我该怎么办?
答案 0 :(得分:0)
您不需要:搜索部分。对服务器进行GET或POST的参数不是需要匹配的url块,它们始终在params散列中可用。
match '/search' => "index#search"
修改强>
想要按照您的方式构建URL并不标准。表单生成的标准格式为“?thing = value”not / value。尝试以该格式自行发送标准。
如果你想处理/ search /:criteria然后这会使你的控制器中的“搜索”变量可用(不在params [:search]哈希)
match "/search/:search" => "items#search"