簡體   English   中英

在 Rails 3 路線中更改參數

[英]Changing params in Rails 3 routes

在我們的一個控制器上,我們將傳入的 Google 流量發送到無效的 URL 參數:

/搜索/?klass=論壇

相反,它應該是:

/搜索/?klass=論壇

目前我有一些執行此操作的控制器#index 代碼:

    if params[:klass] == "forum"
        params.delete(:action) && params.delete(:controller)
        params[:klass] = "forums"
        @query = params.to_query
        redirect_to "/search?#{@query}", :status => 301 and return
    end

我很好奇這是否可以在 routes.rb 中做到,所以它不會影響我們的堆棧,但仍然是正確的 301。 我見過正則表達式用於驗證查詢字符串中的某些參數,但沒有一個用於重寫這些參數的值。

您可以嘗試使用 nginx 或 apache 來處理它,或者您可以使用 Rack 使用這個 hacky 解決方案:

get "/search/" =>  proc { |env| Rack::Request.new(env).params['klass'] == "forum" ? [ 302, {'Location'=> "/search/?klass=forums" }, [] ] : [ 302, {'Location'=> "/" }, [] ] }

也許你可以用:constraints => {:klass => 'forum'}聲明這條路線,並用正確的klass值轉發它。 或者你為什么不只是 append controller 中缺少的“s”?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM