【问题标题】:scoped route pointing to the wrong controller范围路由指向错误的控制器
【发布时间】:2014-03-09 13:48:35
【问题描述】:

为了使 url 像 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"

我不知道为什么,但它总是指向用户显示操作。我怎样才能防止这种情况发生?

【问题讨论】:

    标签: ruby-on-rails routes


    【解决方案1】:

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

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

    搜索

    你的搜索功能有问题method: :get

    当你通过 HTTP 发送 GET 请求时,你的 URL 基本上是这样的:

    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"
    

    【讨论】:

    • 非常感谢您的解释 Rich。基本上我的范围内还有其他路线,我只是展示了这条路线作为我的示例。再次感谢!
    • 没问题 - 希望对您有所帮助!
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多