私は、from_url
とto_url
という列を持つリダイレクトと呼ばれるテーブルを持っています。Railsの異なる列に同じ値のレコードを見つける
ユーザーをあるURLから別のURLにリダイレクトするために使用されます。
だから、例えば私が持っているかもしれません。これらが生成されるように、ユーザーがページのURLを変更した場合
id: 1
from_url: /about-us
to_url: /about
を私は無限ループを防ぐためにしたいしかし、同じリダイレクトが(他の方法アラウンド作成する必要がありますCMSでは元の値に戻すことができます)。
ですから、例えば:このシナリオでは
id: 1
from_url: /about-us
to_url: /about
id: 2
from_url: /about
to_url: /about-us
我々は変更をキャッチする新しいリダイレクトでそれを置き換えてきたし、元のリダイレクトが今あるように、私は、最初のレコードを削除したいと思います正しいURLを再度入力してください。私のモデルでは
が、私は方法はさておき、むしろ厄介なもののループをネストからtest_and_clean
def self.test_and_clean
redirects = Redirect.all
conflicts = []
redirects.each do |redirect|
redirects.each do |redirect2|
# if from_url has a matching to_url (causing a loop)
if redirect.from_url == redirect2.to_url
conflicts.push(redirect2)
end
end
end
# destroy all the conflicts
conflicts.each do |conflict|
conflict.destroy
end
end
と呼ばれている、このアプローチの問題は、彼らのですfrom_url
とto_url
が一致するので、最初のループは、両方のリダイレクトを見つけるだろう両方のリダイレクトで削除されます。後者のみを削除するにはどうすればよいですか?私はlast
メソッドに依存したくないので、保証されていない可能性があります。