route rails only collection ruby-on-rails url slug

ruby-on-rails - only - routes in ruby on rails



Nombre de ID+Slug en URL en Rails(como en StackOverflow) (6)

La gema stringex contiene ActsAsUrl para crear representaciones compatibles con URI de un atributo

https://github.com/rsl/stringex

También contiene una biblioteca Unidecoder, que puede convertir Unicode a ASCII.

Estoy tratando de lograr URL como esta en Rails:

http://localhost/posts/1234/post-slug-name

con ID y nombre de babosa en lugar de cualquiera

http://localhost/posts/1234

o

http://localhost/posts/post-slug-name

(ahora mismo solo tengo el nombre de babosa en la URL, así que esta parte ha terminado). ¿Cómo puedo hacer esto?

UPD

Encontré un artículo sobre esto: http://augustl.com/blog/2009/styling_rails_urls/ , en lugar de /id/slug sugiere usar /id-slug que funciona perfectamente para mí, así que seguiré con esto.


Rails tiene algún soporte incorporado para URLs amigables para SEO.

Puede crear una url en el formulario: "id-title" simplemente anulando el método to_param en su modelo.

Esto es de uno de mis proyectos y crea una url con el ID, el nombre de la categoría y el nombre del modelo:

def to_param "#{id}-#{category.name.parameterize}-#{name.parameterize}" end

Rails es lo suficientemente inteligente como para extraer esto de nuevo en la identificación simple cuando accede a la acción de su controlador, por lo que lo siguiente simplemente funciona:

def show @model = Model.find(params[:id]) render :action => "show" end


Sé que la pregunta es bastante antigua pero creo que todavía merece algo de interés y ninguna de las respuestas está actualizada o proporciona una forma de generar exactamente lo que el OP estaba buscando (es decir, http://localhost/posts/1234/post-slug-name ).

En rutas.rb

get ''posts/:id/:slug'', to: ''posts#show'', as: ''slugged_post''

Luego en las vistas

<%= link_to slugged_post_path(post, post.name.parameterize) %>

Es posible que desee definir un método slug en su modelo para evitar que las llamadas se parametricen en las vistas.


Utilice friendly_id . Tiene una buena característica: puedes actualizar tu url sin romper la anterior.

La generación de la vista url no está funcionando para mí. Acabo de añadir un pequeño método en el modelo.

def to_param self.friendly_id end


Escribí una publicación sobre las babosas en Rails 3. Proporciona URL bonitas e incluso más, protege su sitio de secuencias de comandos aleatorias que solicitan información con solo aumentar las ID. También evita guardar slugs en la base de datos.


Querrá agregar una ruta regular con Route Globbing además de su ruta de recursos (asumiendo que así es como se definen las rutas de sus posts ). Por ejemplo,

map.resources :posts map.connect ''/posts/:id/*slugs'', :controller => ''posts'', :action => ''show''