Rails, маршрутизация многих именованных маршрутов в одно действие - PullRequest
5 голосов
/ 17 февраля 2010

Есть ли более простой способ написать это:

  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-адрес, оставшийся со старого сайта, перенаправляет на нужные страницы.

Приветствие.

Ответы [ 2 ]

7 голосов
/ 17 февраля 2010

Используйте метод 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
2 голосов
/ 17 февраля 2010

Вы всегда можете написать многоцелевой маршрут с регулярным выражением, чтобы захватить детали:

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

В большинстве случаев старые маршруты можно переписать, используя единственный унаследованный маршрут, указанный первым. Также лучше держать таблицу маршрутизации как можно более аккуратной. Второй метод - это скорее опора, чтобы попытаться преодолеть старые маршруты.

...