在Rails 3路线中改变参数

时间:2011-07-15 20:09:33

标签: ruby-on-rails ruby ruby-on-rails-3 routes

在我们的某个控制器上,我们将收到的Google流量转移到无效的网址参数:

/搜索/?克拉斯=论坛

相反,它应该是:

/搜索/?克拉斯=论坛

目前我有一些控制器#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。我已经看到正则表达式用于验证查询字符串中的某些参数,但没有用于重写这些参数的值。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用nginx或apache处理它,或者您可以使用Rack使用这个hacky解决方案:

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

答案 1 :(得分:0)

也许您可以使用:constraints => {:klass => 'forum'}声明此路线,并使用klass的正确值转发它。或者你为什么不把失踪的's'追加到控制器中?