ruby-on-rails Ruby条件路由重定向

ogsagwnx  于 2022-12-15  发布在  Ruby
关注(0)|答案(1)|浏览(180)

我正在尝试基于某些条件执行路由重定向
当前路线:192.120.56.45/fetch/foo_id
我有一个接受foo_id并告诉我们是新foo_id还是旧foo_id的方法,如果是新的,则返回new_foo_id并希望将其重定向到其他域192.108.26.85/new/get/new_foo_id
如果是旧foo_id,则不进行重定向,即192.120.56.45/fetch/foo_id
routes.rb中的当前代码:
get '/fetch/:_id' => redirect { |path_params| "#{fooDetector.detectfoo(path_params[:_id])}" }
方法中的当前代码:

def detectfoo(request_id)
      new_id = get_new_request_id(request_id)
      if new_id.present?
        return "192.108.26.85/new/get/#{new_id}"
      else
        return "192.120.56.45/fetch/#{request_id}"
      end
    end

以上代码以太多重定向结尾,以防其旧foo_id进入无限循环。

bqf10yzr

bqf10yzr1#

你的代码不工作(“太多重定向”),因为一个“旧的”foo在循环中一遍又一遍地重定向回它自己。你想说的是“只重定向新的foo”。
为了在路由器中执行此条件路由/重定向,您需要使用一个约束。

get '/fetch/:id', to: 'new_foo#index', constraints: NewFooDetector.new
get '/fetch/:id', to: 'old_foo#index', constraints: OldFooDetector.new

另一种选择是将此重定向放在OldFooController#index操作的顶部(可能作为before_action)。

相关问题