Направляющие, направляя много именованных маршрутов к одному действию

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

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

Удачи.

5
задан MintDeparture 17 February 2010 в 15:04
поделиться

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

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

2
ответ дан 14 December 2019 в 01:07
поделиться

Используйте 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
7
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: