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''