Actualmente, al guardar, estoy tratando de verificar si un registro cae en un 'alcance' particular. Este 'alcance' realmente es solo algunos argumentos guardados para una llamada .where. También con este 'alcance' solo estoy comprobando los valores del objeto, nunca cómo se relaciona con otros objetos en la base de datos, por lo que consultar la base de datos siempre será exagerado si tiene sentido.Verifique para ver si un objeto de registro activo particular está en un 'alcance' particular
sólo he sido capaz de llegar a la solución por debajo de
begin
result = self.class.where(scope).find(self.id)
rescue
result = false
end
El problema con esto es que tengo para consultar la base de datos a pesar de que ya tengo el registro, y tengo que ejecutar esto no solo antes de guardar, pero después de guardar para verificar los valores que era y los valores que serán después de guardar, porque no hay forma de consultar la base de datos para la versión actualizada si no se ha guardado.
Puede haber varias de estas comprobaciones, por lo que me gustaría evitar tener que hacerlo dos veces, y también tener que consultar la base de datos muchas veces, incluso si finalmente estoy buscando algo por ID.
La única otra solución en la que he podido pensar sería tener un método que de alguna forma traduce la llamada where a un proceso que devuelve un valor booleano cuando pasa un objeto. El único problema con esto es la traducción, de alguna manera tendría que funcionar con el adaptador de registro activo que se está utilizando, lo que parece un proyecto completo para sí mismo. Entonces, ¿alguien sabe de alguna manera de hacer esto, o de una joya que ayudaría?
PD Obteniendo el 'alcance' de la memoria caché, así que no puedo guardarlo como un proceso porque no puedes poner procs en la memoria caché con Rails.
Puede ser útil proporcionar un ejemplo concreto del registro que está guardando, las condiciones del alcance y por qué está tratando de hacer esto. Puede haber una mejor manera de hacer lo que sea exactamente lo que estás tratando de hacer. – deefour
El registro podría ser cualquier cosa y también el alcance siempre y cuando no requiera comparación con ninguna otra cosa en la base de datos, se supone que es reutilizable sin importar la configuración. Sin embargo, es para un sistema de almacenamiento en caché. Así que, básicamente, si el registro antes o después de guardar cae en el "alcance" de un caché, ese caché se elimina. Es para páginas realmente complicadas que desea almacenar en caché, pero no desea caducar a menos que el registro actualizado pueda ser parte de la caché. – rovermicrover
misma pregunta aquí: http://stackoverflow.com/questions/1255815/check-if-model-instance-falls-within-named-scope-in-rails – voondo