【问题标题】:Creating an alias (i.e. second name) for a model in Rails在 Rails 中为模型创建别名(即第二名)
【发布时间】:2012-02-11 19:21:38
【问题描述】:

我有一个生产 Rails 2.3.5 网站,我想将模型的名称更改为在 URL 中看起来更好的名称。我知道这样做的简单方法是在 routes.rb 中这样:

map.resources :announcements, :as => :posts

但是,我也需要支持旧名称,因为我们正在生产并且不能有死链接。仅仅使用 ':as' 并不能解决问题。

我基本上是在寻找一种重定向的方法,以便:

http://mysite.com/announcements/23

重定向到

http://mysite.com/posts/23

通过 Apache 可能可以做到这一点,但我似乎无法弄清楚重写规则。我想也许 routes.rb 会是一个更简单的方法。那里也没有运气。

谢谢!

【问题讨论】:

    标签: ruby-on-rails apache redirect routes


    【解决方案1】:

    取决于我们所说的“重定向” - 听起来最有效的路线可能是使用您的帖子控制器并将重定向添加到公告,然后让公告控制器处理页面。所以,在PostsController

    def index
      redirect_to 'announcements#index'
    end
    

    等等。只要您愿意,它就可以为您提供对旧链接的旧版支持,如果您不再需要它,您可以删除整个 Posts Controller。

    【讨论】:

    • 感谢您的建议!我最终想出了一个简单的 mod_rewrite 规则,我将在下面发布。
    【解决方案2】:

    我最终找到了一个效果很好的解决方案。

    我将:as => :posts 添加到我的 routes.rb 中,这使得所有链接助手都可以创建指向新 URL 的链接。然后我想出了一个 mod_rewrite 规则来处理重定向,因此互联网上没有任何断开的链接。这是我添加到我的 Apache 配置中的内容:

    RewriteEngine On    
    RewriteRule ^/announcements(.*) /posts$1 [R=301,L]
    

    【讨论】:

      【解决方案3】:

      如何将路线添加两次。有:as 选项和没有?

      //routes.rb
      map.resources :announcements
      map.resources :announcements, :as => :posts
      

      【讨论】:

        猜你喜欢
        • 2014-06-03
        • 2023-03-06
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多