【问题标题】:Accessing Rails route helpers in route redirect block在路由重定向块中访问 Rails 路由助手
【发布时间】:2016-02-14 23:52:14
【问题描述】:

有没有一种方便的方法可以在路由重定向块中访问路由助手?

get 'new-page' => 'home#new_page', as: :new_page

get 'old-page', to: redirect(:new_page)
# or something like:
get 'old-page', to: redirect { |_, _| new_page_path }

编辑:

这个解决方案有效,但很丑:

get 'old-page', to: redirect { |_, _| Rails.application.routes.url_helpers.new_page_path }

【问题讨论】:

  • 由于路由助手是基于路由文件动态创建的,我不确定它是否会在路由文件内部工作。你试过了吗?
  • 是的,这个解决方案有效,但它很丑:get 'old-page', to: redirect { |_, _| Rails.application.routes.url_helpers.new_page_path }

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


【解决方案1】:

看起来 OP 解决了他们自己的问题,但我想回答这是一个很好的解决方案:

get 'old-page', to: redirect { Rails.application.routes.url_helpers.new_page_path }

如果你厌倦了写Rails.application.routes.url_helpers,很容易为此定义一个辅助方法:

Rails.application.routes.draw do
  get 'old-page', to: redirect { url_helpers.new_page_path }
  get 'another-page', to: redirect { url_helpers.new_page_path }

  def url_helpers
    Rails.application.routes.url_helpers
  end
end

【讨论】:

    【解决方案2】:

    如果你在上面直接定义'new-page'的路由,为什么你需要使用路径助手?这还不够吗?

    get 'old-page', to: redirect('new-page')
    

    还是我错过了什么?

    如果您需要动态细分,您仍然可以执行以下操作:

    get 'old-page/:this_is_dynamic', to: redirect('new-page/%{this_is_dynamic}')
    

    【讨论】:

    • 如果路由嵌套在多个作用域/命名空间中怎么办?
    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多