在Rails中为模型创建别名(即第二个名称)

时间:2012-01-16 22:11:10

标签: ruby-on-rails apache redirect routes

我有一个生产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会是一种更简单的方法。那里没有运气。

谢谢!

3 个答案:

答案 0 :(得分:0)

取决于“重定向”的含义 - 听起来最有效的路线可能是将您的帖子控制器添加到公告中,并让公告控制器处理这些页面。所以,在PostsController

def index
  redirect_to 'announcements#index'
end

等等。只要您愿意,就可以为旧链接提供遗留支持,如果有时间您不再需要它,您可以放弃整个帖子控制器。

答案 1 :(得分:0)

我最终找到了一个非常好的解决方案。

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

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

答案 2 :(得分:0)

如何添加路由两次。使用:as选项而没有?

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