gpt4 book ai didi

ruby-on-rails - Rails 使用 routes.rb 重定向旧 URL

转载 作者:行者123 更新时间:2023-12-05 00:05:23 25 4
gpt4 key购买 nike

我有一个用 Coldfusion 构建的旧站点,一个用 Rails 构建的新站点。我想将旧 URL 重定向到新 URL。我不确定路线是否适合(我是菜鸟)。 URL 将非常相似。这应该很容易,但我不确定最好的方法。

旧网址:

mysite.com/this-is-the-slug-right-here/

新网址:
mysite.com/blog/this-is-the-slug-right-here

这是问题,我有 3 个“内容类型”。旧站点 url 没有区分内容类型。新的 Rails 站点对每种内容类型都有一个 Controller :博客、照片、移动照片。

所以在上面的例子中 /blog/是 Controller (内容类型)和 this-is-the-slug-right-here是内容的永久链接或 slug。我得到这样的:
@content = Content.where(:permalink => params[:id]).first

我应该使用routes.rb,还是需要某种包罗万象的脚本?任何让我指向正确方向的帮助将不胜感激。

编辑以进一步澄清

这是一篇博文: http://jyoseph.com/treadmill-desk-walk-this-way/

新 URL 将是 /blog/treadmill-desk-walk-this-way因为它是一种内容类型的博客。

还有一张照片: http://jyoseph.com/berries/

新 URL 将是 /photos/berries因为它是一种内容类型的照片。

内容类型是内容模型上的一个属性,存储在属性 content_type 中。 .

这是我的 routes.rb 文件:
resources :contents
match 'mophoblog/:id', :to => 'mophoblog#show'
match 'photos/:id', :to => 'photos#show'
match 'blog/:id', :to => 'blog#show'

root :to => "index#index"
match ':controller(/:action(/:id(.:format)))'

知道了 使用@mark 的回答,这就是我的结果。

在我的routes.rb
match ':id' => 'contents#redirect',  :via => :get, :as => :id

在我的内容 Controller 中:
def redirect
@content = Content.where(:permalink => params[:id]).first
if @content.content_type.eql?('Photo')
redirect_to "/photos/#{@content.permalink}", :status => :moved_permanently
elsif @content.content_type.eql?('Blog')
redirect_to "/blog/#{@content.permalink}", :status => :moved_permanently
elsif @content.content_type.eql?('MoPhoBlog')
redirect_to "/mophoblog/#{@content.permalink}", :status => :moved_permanently
end
end

我确信这可以改进,特别是我重定向的方式,但这完美地解决了我的问题。

最佳答案

您不能使用 routes.rb 来执行此操作,但是设置路由、获取内容类型和重定向非常简单。

就像是:

routes.rb
match.resources :photos
match.resources :mobile_photos
match.resources :blog
#everything_else all resource and named routes before
match ':article_id' => 'articles#redirect', :via => :get, :as => :article_redirect

#articles_controller.rb
def redirect
@content = Content.find params[:id]
if @content.content_type.eql?('photo')
redirect_to photo_path(@content), :status => :moved_permanently
elsif @content.content_type.eql?('mobile_photo')
redirect_to mobile_photo_path(@content), :status => :moved_permanently
...
end

现在我在写这篇文章时突然想到,您可能只需要一个 Controller 来完成所有这些工作?

关于ruby-on-rails - Rails 使用 routes.rb 重定向旧 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4541389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com