5


2

Rails、多くの名前付きルートを1つのアクションにルーティングします

これを書く簡単な方法があります:

  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

1つのコントローラーの1つのアクションに多くの名前付きルートを送信したいのですが、古いサイトのURLが正しいページにリダイレクトされるようにしています。

乾杯。

2 Answer


7


http://guides.rubyonrails.org/routing.html#route-options [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


いつでも正規表現を使用して多目的ルートを記述し、詳細をキャプチャできます。

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番目の方法は、古いルートを橋渡しする試みです。