2011-03-16 8 views
5

Estoy creando un programa de referencia para mi aplicación Ruby on Rails, de modo que un usuario pueda compartir un enlace que contenga su ID de usuario (app.com/?r=ID). Si una ID de referencia está presente cuando un visitante llega a la página de inicio de la aplicación, el formulario de suscripción en la página de inicio contiene un campo oculto que se completa con la ID de la referencia. El controlador luego detecta la ID y crea una nueva referencia en una tabla de referencia si el visitante referido se registra. Funciona, y aquí está el trozo de código que: las cosasPrograma de referencia: cookies y más (Rails)

@referrer = User.find(params[:r]) rescue nil 
unless @referrer.nil? 
    @referral = Referral.new(:referrer_id=>@referrer.id) 
end 

Bastante simple, pero es bastante fácil de romper (por ejemplo: si el visitante se desplaza fuera de la página de inicio, ID de referencia se pierde). Siento que las cookies pueden ser un método más robusto, donde una cookie que contiene la ID del referente se almacena en la computadora del usuario referido por x días. Esto es bastante común, especialmente con programas de afiliados como Groupon, pero nunca he trabajado con cookies y no tengo idea de por dónde empezar.

Además, ¿hay alguna buena manera de enmascarar o cambiar las URL del sistema de referencia? En lugar de tener app.com/?r=1842, preferiría algo como app.com/x39f3 < - una secuencia generada de forma aleatoria de números asociados con un usuario dado, sin el r = porción ?.

Cualquier ayuda es muy apreciada. ¡Gracias!

Respuesta

11

Para responder a la pregunta de cookies, es bastante fácil de configurar ellos:

cookies['app-referrer-id'] = params[:r] 

Y entonces es el mismo formato para leer de nuevo (pero sin la asignación). Sugeriría poner este código en un before_filter en su controlador de aplicación. De esta forma, la cookie se establecerá independientemente de la página en la que el visitante llegue por primera vez a su sitio.

Con respecto a cambiar la estructura de las URL al formato sugerido, necesitaría que los códigos de referencia coincidan con un patrón específico, de lo contrario es probable que se encuentre con problemas de enrutamiento. Si, por ejemplo, que se correspondía con el formato de 3 letras seguidas de tres números, se puede poner el siguiente archivo de rutas:

match '/:referrer_id' => 'app#index', :constraints => {:referrer_id => /[a-zA-Z]{3}[0-9]{3}/} 

La referencia al índice de aplicación # se debe cambiar al controlador en el que manejas referencias y puede acceder al referrer_id a través de params [: referrer_id].

Espero que esto sea de alguna utilidad.

Robin

Cuestiones relacionadas