在我最新的网站上,我有一个如下定义的搜索表单:
= form_tag search_path(:termen), :method => :get do
= text_field_tag :termen, params[:termen]
= submit_tag "Search »"
一条路线:
# search
get "search(/:termen)" => "articole#cauta", :as => :search
我希望当我按下搜索按钮时可以找到如下网址:
http://www.mysite.com/search/[the_termn_that_was_typed]
所以例如当我在搜索“吸血鬼”时,我应该得到:
http://www.mysite.com/search/vampire
有关此问题的任何线索吗?
非常感谢,
答案 0 :(得分:6)
我认为RESTful这样做的方法是重新定位已发布的请求以获取您希望它的构造URL的请求。
这是两条路线
resources :articles do
collection do
get :search, :action => 'search_post', :as => 'search_post'
get 'search/:q', :action => 'search', :as => 'search'
end
end
现在在控制器中,您将发布请求重定向到获取请求
def search_post
redirect_to search_articles_path(params[:q])
end
由于提交表单,用户最终会在网址上
http://www.mysite.com/articles/search/vampire
答案 1 :(得分:1)
我不认为你可以直接使用表格来解决这个问题,因为这就是参数的提交方式。你可以用一些javascript来做到这一点。我会提供一个我觉得有点笨重的解决方案,你可以决定它是否值得。
首先是js(使用jQuery):
$(".search_submit").click(function(){
var button = $(this);
var form = button.closest("form");
var action = form.attr("action");
var text_field = form.find(".search_text");
var value = text_field.val();
window.location = action + "/" + value;
return false;
});
然后你的视图代码只需添加适当的类:
= form_tag search_path(:termen), :method => :get do
= text_field_tag :termen, params[:termen], :class => "search_text"
= submit_tag "Search »", :class => "search_submit"
希望有所帮助。