2

在我最新的网站上,我有一个这样定义的搜索表单:

= 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

这个有什么线索吗?

十分感谢,

4

2 回答 2

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

作为提交表单的结果,用户最终在 url 上

http://www.mysite.com/articles/search/vampire
于 2013-01-09T10:02:55.753 回答
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"

希望有帮助。

于 2012-04-08T18:56:09.280 回答