如何在Rails中更改URL

我有一个名为Book的资源,然后我有以下域名:

domain.com/books/272 

但我想把它改成

  domain.com/stories/272 

仅限URL,不需要更改控制器,类等。

在我的路线

  map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' map.root :controller => 'static' 

我该怎么做? 谢谢

真的取决于你已经拥有的东西。

将此代码用于您的路线文件:(如果books的原始URL被stories替换)

 #resource routes map.resources :books, :as => :stories #named routes map.books 'stories/:id' 

在没有定义路线的情况下,我能想到的唯一选择 – 看起来非常错误 – 就是添加一个新的控制器,它inheritance自你的书籍控制器。 您需要浏览应用程序并更改用于生成路径或URL的控制器名称,如以下示例所示:

 class BooksController < ApplicationController class StoriesController < BooksController 

就个人而言,我建议你花点时间来定义你的路线,但我想这取决于你正在使用的应用程序的大小。

本指南将帮助您了解RoR中的路由: http : //guides.rubyonrails.org/routing.html

在rails 3中,我相信你会做以下事情:

 resources :books, :path => 'stories' 

它被称为命名路由,并在您的config/routes.rb

在您的路线文件中:

 map.stories 'stories/:id', :controller => 'books', :action => 'show' 

然后在您的视图中,您可以访问此路线:

 <%= link_to book.name, stories_path(book) %> 

确保将book.name更改为您想要的任何名称。 还要确保将book作为局部变量传递给路径路径。

您还可以使用相应模型中的to_param:id更改为更友好的SEO。

在你的模型中:

  def to_param "#{id}-#{name.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase}" end 

还要确保使用图书模型实际具有的属性替换name