如何在Rails中更改URL

时间:2010-08-20 23:55:40

标签: 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'

我该怎么办?感谢

3 个答案:

答案 0 :(得分:8)

在rails 3中,我相信你会做到以下几点:

resources :books, :path => 'stories'

答案 1 :(得分:5)

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

将此代码用于路线文件:(如果原始网址books替换为stories

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

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

class BooksController < ApplicationController

class StoriesController < BooksController

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

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

答案 2 :(得分:3)

它被称为命名路线,并在config/routes.rb

中完成

在路线档案中:

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

然后在您的视图中,您可以使用以下方式访问此路线:

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

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

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

在你的模特中:

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

另外,请确保使用图书模型实际拥有的属性替换name