Ruby on rails 如何在Rails中更改URL

Ruby on rails 如何在Rails中更改URL,ruby-on-rails,Ruby On Rails,我有一个名为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' 我怎么做?谢谢这取决于你已

我有一个名为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'

我怎么做?谢谢

这取决于你已经拥有了什么

将此代码用于路由文件:(如果
书籍
的原始URL被
故事
替换)

在不定义路由的情况下,我能想到的唯一选项(这似乎是非常错误的)是添加一个从books控制器继承的新控制器。您需要检查应用程序并更改用于生成路径或URL的控制器名称,如以下示例所示:

class BooksController < ApplicationController

class StoriesController < BooksController
class BooksController
就个人而言,我建议您花点时间定义路由,但我想这取决于您使用的应用程序有多大


本指南将帮助您了解RoR中的路由:

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

在路由文件中:

map.stories 'stories/:id', :controller => 'books', :action => 'show'
然后在您的视图中,您可以通过以下方式访问此路线:

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

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

在rails 3中,我相信您会执行以下操作:

resources :books, :path => 'stories'

使用
:as
选项有一种更好的方法来实现这一点。这是迄今为止实现此修复的最简单、有效和实用的方法。这是关于这个问题的最新答案。
 def to_param
     "#{id}-#{name.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase}"
 end
resources :books, :path => 'stories'