Son normalizacion de campos (UTF8 → ASCII con guiones), junto con el
truco #to_param. En la aproximacion del post hay una diferencia, y es
que se pone el ID delante, como hacen en Working with Rails:
aprovechando el hecho hackeriano que Model.find(params[:id]) se lo
traga tal cual.
Para no tener ese ID (a mi personalmente no me gusta), se mantiene
con callbacks un campo unico en la base de datos, url_id, con la
cadena “camisa-verde-small”, y siempre usas
Model.find_by_url_id(params[:id])
Si se quiere, tocando las rutas se pueden obtener la llave :url_id en
lugar de :id en params, ya a gusto del consumidor. Naturalmente el
generador del url_id no puede asumir en general que esa combinacion
de campos sera unica y tiene que añadir un sufijo o algo asi para
garantizar que el url_id es unico en caso de colisiones. No se puede
asumir que nombre+apellido de clientes sera unico, o titulo de post,
por ejemplo. Pero si las colisiones son infrecuentes la mayoria de
URLs quedan limpias.