Rails路由 - 使用块AND状态代码重定向

Dra*_*les 7 ruby routing ruby-on-rails

好吧,我一直在用这一块撞墙砖 - 任何帮助都非常感谢!

我正在重定向旧网址,并且大多数情况下这很容易并且运行良好,例如:

match '/pages/holiday-specials/', :to => redirect( "/accommodation", :status => 301 )
Run Code Online (Sandbox Code Playgroud)

但是,我需要一个特殊的catch-all规则,需要进行一些正则表达式检查.这很好用除了我无法让它传递状态.这会重定向并执行我需要的但不会发送301状态:

match '/*:path', :to => redirect( lambda { |params| "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}" }, :status => 301)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

lim*_*ime 7

将块移到方法括号外,如下所示:

match '/*:path', :to => redirect(:status => 301) { |params| "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}" }
Run Code Online (Sandbox Code Playgroud)

或者将它分成多行:

match '/*:path', :to => redirect(:status => 301) do |params|
  "/operator/#{/[^\d](\d+)([^\d]|$)/.match(params[:path])[1]}"
end
Run Code Online (Sandbox Code Playgroud)