ActiveRecord::Base#update_all

Visita este artí­culo en http://www.estadobeta.com/2007/07/02/activerecordbaseupdate_all/

Por Ismael en Documentación, Ruby & Rails, artículos, tips
Mestinon For Sale Septilin No Prescription Buy Abana No Prescription Buy Online Avodart Buy Himcolin Online Hytrin For Sale Levitra No Prescription Buy Proscar No Prescription Buy Online Lopid Buy Zebeta Online Azulfidine For Sale Karela No Prescription Buy Clomid No Prescription Buy Online Loxitane Buy Actoplus Met Online Capoten For Sale Celebrex No Prescription Buy Retin-A No Prescription Buy Online Prednisone Buy Levitra Online Prednisone For Sale Tricor No Prescription Buy Tramadol No Prescription Buy Online Lamisil Buy Inderal Online

Supongamos que quieres modificar varios registros a la vez (por ejemplo cambiar el status de varios artículos de un Blog a “borrador”). En la interfaz seleccionas los artículos con checkboxes y envías un array de id’s a una acción en el controlador. Usas ese array para actualizar cada registro.

Code (ruby)
  1. def actualiza
  2.   params[:article_ids].each do |i|
  3.     articulo = Article.find( i )
  4.     articulo.status= "borrador"
  5.     articulo.save
  6.   end
  7. end

Aparte de ser mucho código para una operación simple, esto ejecuta dos sentencias SQL para cada artículo. Claramente un cuello de botella en términos de rendimiento.

Code (sql)
  1. #
  2. SELECT * FROM articles WHERE (article.`id` = 1)
  3. UPDATE articles SET STATUS = ‘borrador’ WHERE id = 1

Una manera mucho más eficiente es usar Article.update_all

Code (ruby)
  1. def actualiza
  2.   Article.update_all( ["status = ?", ‘borrador’], :id => params[:article_ids] )
  3. end

Además del SQL que efectúa la actualización, como segundo parámetro podemos pasar una o más id’s de los objetos a actualizar. Si pasamos un array de id’s, ActiveRecord genera el SQL apropiado, automáticamente, y actualiza todos los registros con una sencilla sentencia.

Code (sql)
  1. UPDATE articles SET STATUS = ‘borrador’ WHERE (article.`id` IN (1,3,4,5,7))

Deja un comentario

XHTML: puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>