Quiero alterar un registro, pero no quiero leerlo primero en la base de datos, porque francamente no veo el punto. Es enorme y atraviesa una red que es lenta y costosa. ¿Se puede hacer (fácilmente)?¿Es posible alterar un registro en rieles, sin leerlo primero?
Digamos que tengo un registro con 100 campos (por razones de argumentos) y quiero alterar un campo de la tabla. Tengo una conexión realmente mala con la base de datos (esto es cierto) porque está alojada en un cuadro diferente y no hay nada que pueda hacer para cambiar esto. Ahora mismo despliegue el registro y los rieles validan su contenido (porque tengo bits serializados) Luego modifico un campo (uno de los cientos dependiendo de la condición X) y guardo el registro nuevamente. Lo cual supongo que vuelve a escribir todo el registro en la base de datos, sin conocimiento del hecho de que solo cambié un poco. (este último es supuesto)
Ahora para cambiar un registro que está enviando una gran cantidad de datos a través de la red, y podría ser que yo sólo estoy cambiando una pequeña cosa pequeña .. también lo está haciendo dos consultas en la base de datos. Primero seleccione * luego la actualización ..
Así que mi pregunta ... ¿hay clases base más inteligentes que lo hagan bien, para escribir sin leer?
En la parte superior de mi cabeza, creo que un método setter para cada campo con una bandera bool para cambiar. Al guardar, caminar por las banderas y donde sea cierto ... ¿Esto sucede ahora? Si es así, ¿cómo puedo usarlo?
"(este último es un supuesto)": esa es una suposición falsa. ActiveRecord es lo suficientemente inteligente como para escribir solo los valores modificados. Ya cuenta con indicadores para realizar un seguimiento de los campos que cambiaron. –
En realidad, mira los documentos para esto (llamados por cierto "Actualizaciones parciales") en realidad solo están en los rieles de borde y no están programados para ser lanzados hasta Rails 4. Puede haber un complemento o gema "actualizaciones parciales". –
Sí, es una actualización inteligente. Y sobre hacer un hallazgo primero, si sabes lo que quieres actualizar, ¿no es encontrar un registro con su ID una operación de tiempo constante? ¿Qué tan grande puede ser el DB? – Shaunak