[Dica Rápida] Bulk update (atualização em massa) no Rails

Depois de muito tempo sem postar nenhuma dica rápida, estou escrevendo uma de Rails agora.
É relativamente comum precisarmos fazer uma atualização em mais de uma linha da mesma tabela e quando se está usando o ActiverRecord é muito comum pensar em fazer um where e depois, usando um update_attribute, atualizar os registros. Algo como:

Usuario.where('login in (?)', ['a', 'b', 'c']).each do|u|
 u.update_attribute :status, :bloqueado
end

O grande problema desse código é que ele irá executar 4 comandos SQL diferentes, mas seria fácilmente resolvido com apenas 1. Para que o ActiverRecord execute um único comando update com a cláusula where basta usar o método update_all:

Usuario.where('login in (?)', ['a', 'b', 'c']).update_all( status: :bloqueado )

Dica rápida parte 2: Além do update_all também existe o delete_all.

Tagged with: , , ,
Posted in dica rapida
One comment on “[Dica Rápida] Bulk update (atualização em massa) no Rails
  1. PotHix says:

    Æ!!

    boa hein! O delete_all eu já usei bastante, mas o update_all é novo pra mim. Boa! :)

    Há braços

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>