【问题标题】:Redirect from within routes.rb in Rails从 Rails 中的 routes.rb 中重定向
【发布时间】:2016-06-28 20:46:32
【问题描述】:

我正在为我的数据库中的记录创建名称更改历史记录。因此,如果有人更改了他们拥有的东西的名称,旧的 URLS 仍然有效。

我正在尝试这样的事情:

get '/:id', to: "services#show", as: 'show_service', constraints: lambda {|request|
  urls = ['a', 'b', 'c']
  if urls.include? params[:id]
    puts "Yep - this works."
    return redirect latest_url
  else
    # Nothing matches, this service doesn't exist.
    return false
  end
}

这条路线的两种完成方式:

  1. WORKING:它什么也没找到并返回 false,因此路由执行顺序继续向下。

  2. 不工作:它找到一些东西并重定向到路由历史中的最新名称。

返回重定向 latest_url 根本没有重定向 - 有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails url redirect routing routes


    【解决方案1】:

    由于针对每条路线的测试在第一场比赛中停止,因此拥有两条路线会更简单:

    # legacy name support
    get '/:id', to: redirect(latest_url), constraints: lambda { |request|
      urls = ['a', 'b', 'c']
      urls.include? request.params[:id]
    }
    
    # latest and greatest
    get '/:id', to: "services#show", as: 'show_service'
    

    PS:我还建议这足够复杂,以保证它自己的类响应 matches? 而不是内联 lambda,请参阅 http://guides.rubyonrails.org/routing.html#advanced-constraints

    PPS:根据您的用例的复杂程度,值得看看 friendly_id gem 及其 history 模块。

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2013-09-15
      相关资源
      最近更新 更多