我的应用程序的旧站点地图现已被编入索引。对于一些用旧网址访问我的rails应用程序的人不应该去404。 旧网址看起来像这样
/search?sub_category=210
现在让他们友好之后,它看起来像这样:
/search?sub_category=milling-and-drilling
。
我尝试从控制器重定向它,但它在其他方面引起了太多问题。例如使用相同params
的过滤器。有没有办法从路线文件中做到这一点?
答案 0 :(得分:0)
您可以执行redirect_to route_path(id)
redirect_to route_path(object.find_by_id(id).name)
答案 1 :(得分:0)
如何使用路由将旧网址重定向到rails中的新网址?
AFAIK(据我所知),没有。 (如果通过参数)
routes.rb的主要工作是确定哪些“代码”将处理请求,特别是匹配request.url
和request.method
的请求。它还不涉及请求参数及其值:这些将在控制器本身中处理。虽然,您可以通过routes constraint
现在可以通过“Slug名称或ID”找到,而不是通过ID查找。 在您的模型中,特别是在您的特定示例中,添加如下内容:
class SubCategory < ApplicationRecord
# if you're using a gem for the "friendly" urls, you don't need this method, and just use theirs.
def self.friendly_find!(friendly_id)
# this may not necessarily be `name`, maybe `slug`? or depending on your case
find_by(name: friendly_id) || find(friendly_id)
end
end
在你的控制器中,只需替换你找到记录的地方(也可以根据需要替换其他模型而不只是SubCategory
),特别是在search
动作中:
def search
sub_category = SubCategory.friendly_find!(params[:sub_category])
end
注意:如果未找到记录,friendly_find!
将引发错误。