Rails,将许多命名路由路由到一个操作

Min*_*ure 5 routing action routes ruby-on-rails named

有没有更简单的方式写这个:

  map.old_site_cusom_packages '/customs_packages_options.html', :controller => :public, :action => :redirect_to_home
  map.old_corporate '/corporate.html', :controller => :public, :action => :redirect_to_home
  map.old_track '/track.html', :controller => :public, :action => :redirect_to_home
  map.old_links '/links.html', :controller => :public, :action => :redirect_to_home
  map.old_contact '/contact.html', :controller => :public, :action => :redirect_to_home
Run Code Online (Sandbox Code Playgroud)

我想在一个控制器上向一个动作发送许多命名路由,我确保从旧站点遗留的URL重定向到正确的页面.

干杯.

Joh*_*ley 7

使用with_options方法:

map.with_options :controller => :public, :action => :redirect_to_home do |p|
  p.old_site_custom_packages '/customs_packages_options.html'
  p.old_corporate '/corporate.html'
  p.old_track '/track.html'
  p.old_links '/links.html'
  p.old_contact '/contact.html'
end
Run Code Online (Sandbox Code Playgroud)


tad*_*man 2

您始终可以使用正则表达式编写多用途路由来捕获详细信息:

old_content_names_regexp = Regexp.new(%w[
  customs_packages_options
  corporate
  track
  links
  contact
].join('|'))

map.old_content '/:page_name.html',
  :controller => :public,
  :action => :redirect_to_home,
  :requirements => {
    :page_name => old_content_names_regexp
  }
Run Code Online (Sandbox Code Playgroud)

这应该捕获特定页面并相应地重定向它们。更可靠的解决方案是在数据库中设置某种查找表,在提供任何内容或 404 类型页面之前检查该表。

编辑:对于命名路线,这是一个简单的更改:

%w[
  customs_packages_options
  corporate
  track
  links
  contact
].each do |old_path|
  map.send(:"old_#{old_path}",
    "/#{old_path}.html",
    :controller => :public,
    :action => :redirect_to_home,
  )
end
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,可以使用首先列出的单一遗留路由来重写旧路由。最好使路由表尽可能精简。第二种方法更像是尝试弥合旧路线的拐杖。