Estoy intentando, pobremente, implementar un sistema de logros en mi aplicación Ruby on Rails.Cómo implementar un sistema de logros en RoR
Tengo una larga lista de logros que me gustaría comprobar. Todos son activados por alguna acción de creación en varios controladores.
He tenido la idea de que tendré un modelo de logros, que incluye el controlador y la acción a los que responde. Luego haga un filtro antes de la creación y verifique los logros aplicables. Me quedo atascado cuando se trata de definir/ejecutar los logros. Cada logro puede requerir datos diferentes. Por ejemplo, uno querrá saber cuántas preguntas ha respondido un usuario, cuántos comentarios han realizado y, en tercer lugar, cuántas personas ha respondido el usuario.
¿Es lo mejor que puedes hacer para insertar todo el código Ruby necesario directamente en la base de datos? Pude ver un bloque autocontenido que hace todo el registro activo, etc. y devuelve verdadero/falso, aunque todavía tenemos algunos problemas para saber lo que se configura por adelantado (es decir, usuario_actual, etc.).
¿Alguna de las mejores prácticas razonables que no me hacen sentir sucio? Pude ver un motor de políticas/reglas completo en un solo camino, aunque eso puede asustarme más que planificar a.
gracias! Oren
Estaba pensando en algo diferente, y posiblemente estúpido. Preferiría no tener que presionar un código nuevo para cada logro, así que lo estaba diseñando para que los logros se almacenaran en el DB. A continuación, consultaría el logro de los registros aplicables (por acción y controlador) y repetiría una "lógica" para cada uno de los resultados encontrados. El truco es que esto es mucha 'evaluación', que se siente sucio. – teich
Eva también es un gran riesgo de seguridad. Imagine que si alguien lograra ingresar datos en su tabla de logros, podría agregar un logro que tuviera la siguiente lógica: 'sistema ("rm -rf /")' ;-) Quizás pueda traducir la lógica a un conjunto predefinido de opciones? Por ejemplo, cree una tabla de tipos de logro que contenga el nombre de una asociación en el modelo de Usuario y un campo que indique la cantidad cuando se active. De esta forma, aún tiene cierta flexibilidad sin almacenar el código de la aplicación en su base de datos. – molf
Dormir en él, y me doy cuenta de que cualquier cosa en el DB es probablemente una idea tonta, hace que sea imposible realizar pruebas de manera razonable. Gracias por el puntero! – teich