与搜索表单相关的Rails路由

Cal*_*lin 2 ruby-on-rails rails-routing

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

= form_tag search_path(:termen), :method => :get do
  = text_field_tag :termen, params[:termen]
  = submit_tag "Search »"
Run Code Online (Sandbox Code Playgroud)

一条路线:

# search
get "search(/:termen)" => "articole#cauta", :as => :search
Run Code Online (Sandbox Code Playgroud)

我想当我按下搜索按钮以获得如下网址:

http://www.mysite.com/search/[the_termn_that_was_typed]
Run Code Online (Sandbox Code Playgroud)

所以例如当我在搜索"吸血鬼"时,我应该得到:

http://www.mysite.com/search/vampire
Run Code Online (Sandbox Code Playgroud)

有关这一个的线索吗?

非常感谢,

Ant*_*ton 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
Run Code Online (Sandbox Code Playgroud)

现在在控制器中,您将发布请求重定向到获取请求

def search_post
  redirect_to search_articles_path(params[:q])
end
Run Code Online (Sandbox Code Playgroud)

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

http://www.mysite.com/articles/search/vampire
Run Code Online (Sandbox Code Playgroud)