我有一个称为重定向的表,它具有列from_url
和to_url
。在Rails的不同列中查找具有相同值的记录
它们用于将用户从一个网址重定向到另一个网址。
因此,例如,我可能有:
id: 1
from_url: /about-us
to_url: /about
不过,我想,以防止无限循环应该在同一重定向创建全能的方式等(因为这些是产生当用户更改URL的网页在CMS中,可以将其更改回原始值)。
因此,例如:
id: 1
from_url: /about-us
to_url: /about
id: 2
from_url: /about
to_url: /about-us
在这种情况下,我想删除第一条记录,因为我们已经有一个新的重定向取代它赶上变化,原来的重定向是现在再次修正网址。
在我的模型我有方法从嵌套循环是相当恶劣的所谓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
方法,因为这可能不能保证。