Para obtener la documentación más completa y fácil de usar, consulte la Guía FriendlyId.
FriendlyId es la "excavadora del ejército suizo" de complementos de slugging y enlaces permanentes para Active Record. Le permite crear URL bonitas y trabajar con cadenas amigables para los humanos como si fueran identificaciones numéricas.
Con FriendlyId, es fácil hacer que su aplicación utilice URL como:
https://example.com/states/washington
en lugar de:
https://example.com/states/4323454
Haga preguntas sobre Stack Overflow utilizando la etiqueta "friendly-id" y, para detectar errores, consulte la sección de errores.
FriendlyId ofrece muchas funciones avanzadas, que incluyen:
Agregue esta línea al Gemfile de su aplicación:
gem 'friendly_id' , '~> 5.5.0'
Nota: DEBE usar 5.0.0 o superior para Rails 4.0+.
Y luego ejecuta:
bundle install
Agregue una columna slug
a la tabla deseada (por ejemplo, Users
)
rails g migration AddSlugToUsers slug:uniq
Generar el archivo de configuración amigable y una nueva migración
rails generate friendly_id
Nota: Puede eliminar la migración CreateFriendlyIdSlugs
si no va a utilizar la función de historial de slugs. (Leer más)
Ejecute los scripts de migración
rails db:migrate
Edite el archivo app/models/user.rb
de la siguiente manera:
class User < ApplicationRecord
extend FriendlyId
friendly_id :name , use : :slugged
end
Edite el archivo app/controllers/users_controller.rb
y reemplace User.find
por User.friendly.find
class UserController < ApplicationController
def show
@user = User . friendly . find ( params [ :id ] )
end
end
Ahora, cuando creas un nuevo usuario como el siguiente:
User . create! name : "Joe Schmoe"
Luego puede acceder a la página de presentación del usuario utilizando la URL http://localhost:3000/users/joe-schmoe.
Si estás agregando FriendlyId a una aplicación existente y necesitas generar slugs para los usuarios existentes, hazlo desde la consola, el ejecutor o agrega una tarea de Rake:
User . find_each ( & :save )
:allow_nil
Puede pasar allow_nil: true
al método friendly.find()
si desea evitar generar ActiveRecord::RecordNotFound
y aceptar nil
.
MyModel . friendly . find ( "bad-slug" ) # where bad-slug is not a valid slug
MyModel . friendly . find ( 123 ) # where 123 is not a valid primary key ID
MyModel . friendly . find ( nil ) # maybe you have a variable/param that's potentially nil
#=> raise ActiveRecord::RecordNotFound
MyModel . friendly . find ( "bad-slug" , allow_nil : true )
MyModel . friendly . find ( 123 , allow_nil : true )
MyModel . friendly . find ( nil , allow_nil : true )
#=> nil
Infórmalos en el rastreador de problemas de Github para este proyecto.
Si tiene un error que informar, incluya la siguiente información:
Si puede, será aún más útil si puede bifurcar FriendlyId en Github y agregar una prueba que reproduzca el error que está experimentando.
Para obtener más inspiración sobre cómo informar errores, consulte este artículo.
FriendlyId fue creado originalmente por Norman Clarke y Adrian Mugnolo, con la importante ayuda de Emilio Tagua en sus inicios. Ahora lo mantienen Norman Clarke y Philip Arndt.
Estamos profundamente agradecidos por las generosas contribuciones a lo largo de los años de muchos voluntarios.
Copyright (c) 2008-2020 Norman Clarke y colaboradores, publicado bajo la licencia MIT.
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.