Rails ActiveRecord – Batch Updates
http://apidock.com/rails/ActiveRecord/Base/update_all/class
Tag.where(:is_featured => true).each do |tag|
tag.update_attribute(:is_featured, false)
end
これだとTagオブジェクトがロードされるのでメモリーを食ってしまうので直接Update文を実行したい
Rails RDocのActiveRecord::Relation#update_allに記述されている書き方
Tag.where({:is_featured => true }).update_all({ :is_featured => false })
第二引数に条件を付けられるのでこちらの方が簡潔
Tag.update_all({ :is_featured => false }, {:is_featured => true })
どちらも実行されるSQLは同じ
UPDATE `tags` SET `is_featured` = 0 WHERE `tags`.`is_featured` = 1