2011-07-02 21 views
6

Hola chicos, estoy tratando de crear un enlace amigable para URL a partir de una cadena. En lugar de example.com/Jessica Alba, quiero example.com/jessica-albaCreando una URL seo amigable desde una cadena

¿Cómo consigo las etiquetas link_to me enlaza con el enlace permanente amigable SEO?

También necesito asegurarme de que el método show solo muestra el enlace permanente seo friendly en la barra de direcciones y solo acepta el enlace permanente seo friendly.

Respuesta

4

Puede anular el método to_param en su modelo.

Así que si usted tiene un modelo llamado Celebrity, que tiene una columna name se puede ir:

class Celebrity < ActiveRecord::Base 

    def to_param 
    self.name.downcase.gsub(' ', '-') 
    end 

end 

continuación:

jessica_alba = Celebrity.find_by_name("Jessica Alba") 
    link_to "Jessica Alba", celebrity_path(jessica_alba) 
+2

rieles proporciona un método para hacer lo que es 'parameterize'. Así que te aconsejo que lo uses y crees un nuevo campo llamado ** slug ** en tu modelo. A continuación, agregue una validación en el slug y el método para construirlo. Por ejemplo: 'before_validation: generate_slug def to_param babosa final def generate_slug self.slug = name.parameterize end' y después en el controlador yout que haces: ' jessica_alba = Celebrity.find_by_slug (params [: slug]) ' – Asteriskk

2

salida la joya has_permalink que he creado en http://haspermalink.org

Esa joya te ayudará a resolver eso.

+0

También hay friendly_id https://github.com/norman/friendly_id que me gusta – Dex

27

Lo mejor es utilizar Parameterize método:

name = name.parameterize 

Inflector#parameterize

+2

Sí, este es el camino a seguir. – Philip

+0

A menos que desee personalizar el slug de alguna forma, como usar guiones bajos en lugar de guiones. –

+0

Usuario del separador para personalizaciones, p. Convención de rieles para ids '' '" Tim. Cook ".parameterize ('_') =>" tim_cook "' '' – neonmate

Cuestiones relacionadas