2012-03-08 11 views
6

En mi aplicación de rieles, actualmente tengo una gran cantidad de usuarios que tienen una identificación de usuario registrada.Ocultar identificación de usuario en la barra de direcciones

Si entro en el índice de mis usuarios y hago clic en la página de visualización de un usuario, aparece el siguiente encabezado de ejemplo.

localhost: 3000/usuarios/3

Ahora no me gusta esto, ya que permite a las personas con facilidad para saltar a través de los usuarios de la cabecera.

¿Cómo voy a hacer lo siguiente para que se muestre el campo user.username en lugar, por ejemplo ,.

localhost: 3000/usuarios/adamwest

Respuesta

8

puede definir un método to_param en el modelo de usuario.

class User 
    ... 
    def to_param 
    name 
    end 
    ... 
end 

luego cada URL generado tendrá name en lugar de id como un identificador de usuario.

sid = User.new :name => 'sid' 
user_path(sid) #=> "https://stackoverflow.com/users/sid" 

Por supuesto, en el controlador, debe buscar al usuario por su nombre.

class UsersController 
    ... 
    def show 
    @user = User.find_by_name(params[:id]) 
    end 
    ... 
end 

También sugiero que eche un vistazo a friendly_id joya.

FriendlyId es el "bulldozer del ejército suizo" de slugging y permalink complementos para ActiveRecord. Le permite crear lindas URL y trabajar con cadenas amigables para el usuario como si fueran identificadores numéricos para modelos ActiveRecord.

+0

Gracias por eso, funciona genial. Lo he establecido en lo básico por ahora, pero verificaremos esta joya friendly_id para crear un sitio más amigable. Gracias. – user1222136

+1

Y si 'User # name' puede contener un punto, querrá': constraints => {: name => /.*/} 'en la ruta para evitar que Rails intente interpretar el material después del período como formato. –

Cuestiones relacionadas