2010-08-20 14 views
5

he un recurso llamado libro, entonces tengo dominios como:Cómo cambiar la URL en Rails

domain.com/books/272 

pero quiero cambiarlo a

domain.com/stories/272 

Sólo para la dirección URL, don' t necesitar cambiar controlador, clases etc.

En las rutas I tienen

map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 

    map.root :controller => 'static' 

¿Cómo puedo hacerlo? Gracias

Respuesta

4

Depende realmente de lo que ya tienes.

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

Sin definir rutas única opción que se me ocurre - que parece muy mal - es añadir un nuevo controlador que hereda de su controlador de libros. Necesitaría revisar su aplicación y cambiar el nombre del controlador utilizado para generar rutas o URL.

class BooksController < ApplicationController 

class StoriesController < BooksController 

Personalmente recomendaría se toma el tiempo para definir sus rutas, pero supongo que esto depende del tamaño de una aplicación que se está trabajando.

http://guides.rubyonrails.org/routing.html

+0

he publicado mi routes.rb como una edición, gracias – Victor

+0

actualizado mi respuesta. – mark

3

Se llama rutas con nombre y se hace en su config/routes.rb

En el archivo de rutas:

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

A continuación, en su opinión, se puede acceder a esta ruta con:

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

Asegúrate de cambiar book.name al nombre que quieras. también asegúrese de pasar book como una variable local a la ruta de las rutas.

También puede cambiar :id para ser más amistoso de SEO con to_param en el modelo respectivo.

En su modelo:

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

También asegúrese de que sustituye name con un atributo que el modelo de libro tiene en realidad.

+0

Hay una forma mucho mejor de hacerlo usando la opción ': as'. –

+0

ok gracias por la información. – s84

5

En los carriles 3, creo que haría lo siguiente:

resources :books, :path => 'stories' 
+1

Esta es la mejor respuesta ... – Dudo

Cuestiones relacionadas