0

大規模な Web アプリを更新し、URL シノニム システムを取り除きます。たとえば、「広告主」には 1 つのモデルしか使用しませんが、同義のパスを使用して「業者」と「販売者」にエイリアスされます。したがって、/merchant/1 と /seller/1 は、advertiser/1 とまったく同じコントローラーとアクションを使用します。

この機能はもう必要ありませんが、ユーザーを適切な場所 (つまり、適切なコントローラー アクション) に正しくリダイレ​​クトするには、古い URL が必要です。

これまでのところ、私は試しました:

1) http://guides.rubyonrails.org/routing.htmlを読む- これにより、次の提案を試すようになりました

2) match '/merchants' => redirect('/advertisers') - 構文は正しいようですが、これはまったく機能していないようです。

3) リソースの反復処理 (これにより大量のルートが生成され、不安が生じる可能性があります):

ADVERTISER_SYNONOYMS = ['affiliates', 'sellers']

ADVERTISER_SYNONYMS.each do |a|
  resources :advertisers, :path => a,  :as => :advertiser
    resources :other_controller do
      member do
        get :test
        match :generate_test
      end
    end
  end
end

routes.rb でネストされたリソースを使用しているため、より複雑な URL 全体でこれらのシノニムを認識させるのに苦労しています。誰かがこの問題に対処したり、よりエレガントな提案をしたりした場合は、私は非常に感謝しています.

4

1 に答える 1

0

routes.rbこれを処理するには、試したように追加のルートを追加したり、Apache や Nginx などの Web サーバー レベルで書き換えたりするなど、さまざまな方法があります。

私が気に入っている解決策の 1 つは、ラック書き換えgem です。ルートをクリーンに保ち、ルールは単純な Ruby です。書き換えとリダイレクトを構成するための一連のメソッドを提供します。あなたの状況では、永続的なリダイレクトを使用したいと思います。私は自分でテストしていませんが、次のようなものがうまくいくかもしれません:

# Gemfile
gem 'rack-rewrite'

# application.rb
config.middleware.use(Rack::Rewrite) do
  r301 %r{/merchant|seller/(\w+)}, '/advertiser/$1'
end
于 2013-03-21T02:04:00.483 に答える