]> source.dussan.org Git - redmine.git/commitdiff
Rewrites UpdateMailNotificationValues migration to avoid model validations and failures.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 6 Nov 2010 10:57:56 +0000 (10:57 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 6 Nov 2010 10:57:56 +0000 (10:57 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4368 e93f8b46-1217-0410-a6f0-8f06a7374b81

db/migrate/20100129193813_update_mail_notification_values.rb

index 35ad91709e24b2d174fa2d63249f221803813bb9..fe4bb10cd8029f3c0b465969ad1a4159a3d754fe 100644 (file)
@@ -1,22 +1,9 @@
 # Patch the data from a boolean change.
 class UpdateMailNotificationValues < ActiveRecord::Migration
   def self.up
-    User.record_timestamps = false
-    User.all.each do |u|
-      u.mail_notification = if u.mail_notification =~ /\A(1|t)\z/
-                              # User set for all email (t is for sqlite)
-                              'all'
-                            else
-                              # User wants to recieve notifications on specific projects?
-                              if u.memberships.count(:conditions => {:mail_notification => true}) > 0
-                                'selected'
-                              else
-                                'only_my_events'
-                              end
-                            end
-      u.save!
-    end
-    User.record_timestamps = true
+    User.update_all("mail_notification = 'all'", "mail_notification IN ('1', 't')")
+    User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)")
+    User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')")
   end
 
   def self.down