Contenido del curso
Gestión de modelos en el backend con el ORM Diesel
- 2

Qué es un ORM y por qué usar Diesel
02:55 min - 3

Errores Comunes al Instalar y Usar Diesel en Rust
00:31 min - 4

Instala Diesel ORM en tu proyecto Rust
05:16 min - 5

Modelo Post con Diesel y PostgreSQL
14:22 min - 6

Cómo insertar datos en Diesel con Rust
07:55 min - 7

Queries SELECT con filtros en Diesel
08:16 min - 8

Cómo editar registros con Diesel en Rust
Viendo ahora - 9

Borrar registros en Diesel con filtros
03:01 min
Actix web framework (controlador)
Tera templates (vistas)
Despliegue del proyecto
Continúa tu aprendizaje
Cómo editar registros con Diesel en Rust
Resumen
Editar registros en Diesel es el siguiente paso lógico después de aprender a crearlos y leerlos. Cuando un dato queda desactualizado o tiene un error, no necesitas borrarlo y volver a empezar: con el método update de Diesel puedes modificar uno o varios campos de un registro existente en Rust de forma directa.
¿Cómo funciona el método update en Diesel?
La lógica es sencilla: identificas el registro, eliges qué columnas cambiar y ejecutas la operación contra tu conexión a la base de datos.
Partimos de una query base que trae todos los posts:
rust select * from posts
Al ejecutarla con cargo run, detectamos que el último blog post tiene como slug x-post, cuando debería ser tercer-post. Ese es el registro que vamos a editar.
¿Cómo identifico el registro que quiero actualizar?
Necesitas una variable que contenga el post modificado y un filter que apunte al registro correcto. El patrón es claro: diesel::update recibe la tabla filtrada, y dentro del filter defines la condición.
Puedes filtrar de dos formas:
- Por slug:
posts.filter(slug.eq("x-post")). - Por ID:
posts.filter(id.eq(3)), que suele ser la opción más confiable.
Filtrar por ID es la práctica recomendada porque el identificador es único e inmutable, mientras que un slug o un título pueden repetirse o cambiar.
¿Por qué conviene filtrar por ID al actualizar? Porque el ID es único y estable. Si filtras por slug o título, corres el riesgo de actualizar varios registros o ninguno si el valor cambió antes.
¿Cómo cambio uno o varios campos con set?
Una vez ubicado el registro, el método set define qué columnas se actualizan. Para un solo campo basta con pasar la asignación directa:
rust let post_update = diesel::update(posts.filter(id.eq(3))) .set(slug.eq("Tercer post")) .get_result::<Post>(connection) .expect("Error en el update");
Aquí pasa algo importante con los paréntesis: el update solo envuelve hasta el filter, no más. Si los cierras mal, el compilador marcará error. Después viene el .set(...), el .get_result::<Post>(connection) para devolver el registro actualizado y el .expect(...) para manejar el fallo.
Al correr cargo run, el ID 3 ya muestra como slug Tercer post. Si en lugar de slug quieres editar el body, cambias el campo dentro del set:
rust .set(body.eq("este es el post que hemos editado"))
¿Cómo edito dos o más campos al mismo tiempo?
No necesitas duplicar la operación ni hacer dos llamadas a update. Diesel permite pasar una tupla dentro de set con todos los campos que quieras modificar. La sintaxis es abrir un paréntesis adicional dentro del set, lo que produce el característico doble paréntesis:
rust .set(( body.eq("lo que hemos editado otra vez"), title.eq("Mi tercer blog post") ))
Con esa estructura, en una sola transacción cambias body y title del mismo registro. Al ejecutar de nuevo, el post aparece con el título Mi tercer blog post y el body actualizado.
¿Cómo actualizo varios campos en una sola query con Diesel? Pasa una tupla al método
setcon cadacolumna.eq(valor)separados por coma. Eso ejecuta un únicoUPDATESQL eficiente.
¿Qué piezas componen una operación update completa?
Para dejar el flujo claro, estos son los elementos que siempre vas a combinar al editar un registro:
diesel::updateenvolviendo la tabla filtrada.filtercon la condición que ubica el registro, idealmente por ID.setcon un campo o una tupla de campos a modificar.get_result::<Tipo>(connection)para recuperar el registro ya actualizado.expecto manejo de error para capturar fallos en la operación.
Un detalle de sintaxis en Rust: cuando tipas el resultado, recuerda los dos puntos dobles antes del tipo, como en ::<Post>. Si los olvidas, el compilador no resolverá el genérico.
Con estas herramientas ya puedes modificar cualquier registro creado previamente, ya sea para corregir un dato puntual o para refrescar varios campos en una sola operación. ¿Qué campo de tu modelo te gustaría poder editar masivamente? Cuéntamelo en los comentarios.