5

有没有更简单的写法:

  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

我想将许多命名路由发送到一个控制器上的一个操作,我确保从旧站点重定向到正确页面的剩余 URL。

干杯。

4

2 回答 2

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
于 2010-02-17T15:22:36.257 回答
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
  }

这应该捕获特定页面并相应地重定向它们。一个更健壮的解决方案是在提供任何内容或 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

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

于 2010-02-17T15:28:22.283 回答