Estoy construyendo una modesta aplicación en la que se podrán ver
charlas incrustadas en video a partir de ponentes. Los usuarios podrán
darse de alta, publicar ponentes, publicar charlas y asignarlas a
ponentes, comentar, hacer contactos, guardar favoritos…
Una de las necesidades que tengo es incluir las veces que una charla ha
sido vista para filtrarlas más adelante.
Mi duda es de enfoque (mi nivel en Rails es de iniciación):
¿Cómo puedo hacer un contador para conocer cuantas veces se ha visto
cada video? Tengo estas opciones en mente…
Crear un campo “contador” dentro del propio modelo “Talk” y subirlo
con un +1 para cada vista de la página.
3, Me han comentado, incluso apoyarme en modelo + otra base de datos
para no bloquear peticiones. Creo que esta opción, puede ser más de lo
que necesito para arrancar.
En principio, descarto limitar vistas por visitante y sesión. ¿Creeis
que alguna opción es mas recomendable que otra?
Hace unos meses solucioné un problema parecido para guardarme
estadísticas de unos modelos. Finalmente saqué un plugin para poder
reutilizar la
implementación.
Si quieres pegarle un vistazo esta por github http://github.com/flype/stats_for_all/tree
Si no te aclaras para ponerlo en marcha o encuentras algún bug,
coméntalo y lo miramos.
Crear un campo “contador” dentro del propio modelo “Talk” y subirlo
con un +1 para cada vista de la página.
Por lo general soy partidario de estas soluciones. A menos que este
previsto que sea necesaria la generalizacion yo aplico los axiomas you
ain’t gonna need it, y keep it simple. Eso es lo que necesitas, y se
implementa en un momento.
Si esta previsto que tenga otros usos entonces el diseño deberia
acomodarlos a todos.
La diferencia que hay entre esta y las otra es abismal. Mientras que
con esta podrás mostar al usuario un historial de las páginas vistas
por usuario, con el resto no.
Crear un campo “contador” dentro del propio modelo “Talk” y subirlo
con un +1 para cada vista de la página.
Comparto opinión con Xavier. Además ActiveRecord ya te da todo el
trabajo hecho.
class TalkController < ApController
after_filter :update_views
private
def update_views
Talk.increment_counter(:views,params[:id])
end
end
Eso si, serÃa un insert por consulta. Pero es la solución más sencilla
3, Me han comentado, incluso apoyarme en modelo + otra base de datos
para no bloquear peticiones. Creo que esta opción, puede ser más de lo
que necesito para arrancar.
Entiendo las consecuencias que planteais. La riqueza de datos es una
“batalla” que me puede costar perder la “guerra” del proyecto. Estoy
dispuesto a prescindir de ella a cambio de seguir avanzando.
Guardar un contador de visitas para cada charla. Optimizar por
rendimiento te darÃa contador en el modelo Talk, contador aparte, base
de
datos externa.
Guardar información mucho más rica para cada visita, IP
¿geolocalizada?,
fecha, etc. Con esta opción puedes mostrar gráficas de evolución,
correlacionar datos, etc.