2010-02-15 18 views
6

Actualmente estoy compilando una aplicación de Rails y me gustaría seguir con todas esas cosas elegantes como RESTO y Recursos, pero me gustaría personalizar un poco mis rutas. Quiero que mi ruta GET sea poco más detallada: la aplicación que estoy creando es un blog simple, así que en lugar de GET /posts/1 preferiría algo como GET /posts/1-my-first-post.Enrutamiento de rieles: rutas personalizadas para Recursos

¿Alguna idea de cómo hacer esto? No encontré nada en la web.

Respuesta

4

definir un método to_param en su modelo y todos los ayudantes URL youse lo regrese con ese método, por ejemplo:

class Post < ActiveRecord::Base 
    der to_param 
    slug 
    end 
end 

También tendrá que adaptar sus controladores de ese. Reemplazar:

Post.find(params[:id]) 

con:

Post.find_by_slug(params[:id]) 

También tenga en cuenta que el método hallazgo plantea ActiveRecord :: RecordNotFound excepción cuando el registro no se puede encontrar al utilizar el método find_by_ * No hay excepciones serán levantados por lo necesita verificarlo manualmente.

0

Alternativamente ...

Añadir un método como este para application_helper.rb

def permalink(post) 
    "#{post_path(post)}-#{post.slug}" 
end 

A continuación, utilice lo siguiente en sus puntos de vista (usando permalink(@post) en lugar de post_path)

<%= link_to @post.title, permalink(@post) %> 
0

alternativa ..

Añade un método como este a post.rb

def path 
    "/posts/#{id}-#{slug}" 
end 

A continuación, utilice lo siguiente en sus puntos de vista:

2

Usted puede encontrar el plugin friendly_id útil, ya que también se encargará de redirecciones si cambia el nombre de sus babosas (por lo tanto SEO), maneja las colisiones de nombres y se integra perfectamente con el método de búsqueda para que no tenga que tocar los métodos de su controlador (a excepción de la cosa de redireccionamiento).

Cuestiones relacionadas