我有一个名为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'
我该怎么办?感谢
答案 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
作为局部变量传递给路径路径。
您还可以在相应的模型中使用:id
将to_param
更改为更友好的SEO。
在你的模特中:
def to_param
"#{id}-#{name.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase}"
end
另外,请确保使用图书模型实际拥有的属性替换name
。