如何在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
。