指向错误控制器的scoped路由

时间:2014-03-09 13:48:35

标签: ruby-on-rails routes

为了制作像http://example.com/:username这样的网址,我为我的用户展示操作构建了我的路线,如下所示:

scope ':username' do
  get '' => 'users#show', as: :user
end

(这里的信息是我的用户模型to_param方法)

def to_param
  username
end

为了防止通过这条路线访问其他控制器,我在此之前添加了所有其他路由。它似乎工作除了这个:

get 'search/:query' => 'searches#show', as: :search

我的表格在哪里:

  = form_tag search_path(query: {} || params[:query]), method: :get do
    = text_field_tag :query, params[:query], class: "form-control"
    = submit_tag "Search", class: "btn btn-primary"

我不知道为什么但它始终指向用户show动作。我该如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

为什么要使用示波器?你可以这样做:

#config/routes.rb
get ':username', to: 'users#show', as: :user

搜索

搜索功能的问题是method: :get

当您通过HTTP发送GET请求时,您的网址基本上如下所示:

http://domain.com/search?query=your+search+query

More info

您最好发送POST请求,例如:

#config/routes.rb
post 'search/:query', to: 'searches#show', as: :search

#view
 = form_tag search_path(query: {} || params[:query]), method: :post do
    = text_field_tag :query, params[:query], class: "form-control"
    = submit_tag "Search", class: "btn btn-primary"