Modernise use of find and update_all in database migrations
[rails.git] / db / migrate / 044_create_user_roles.rb
1 require 'migrate'
2
3 class CreateUserRoles < ActiveRecord::Migration
4   def self.up
5     create_enumeration :user_role_enum, ["administrator", "moderator"]
6
7     create_table :user_roles do |t|
8       t.column :user_id, :bigint, :null => false
9
10       t.timestamps
11     end
12     add_column :user_roles, :role, :user_role_enum, :null => false
13
14     User.where(:administrator => true).each do |user|
15       UserRole.create(:user_id => user.id, :role => "administrator")
16     end
17     remove_column :users, :administrator
18
19     add_foreign_key :user_roles, [:user_id], :users, [:id]
20   end
21
22   def self.down
23     add_column :users, :administrator, :boolean, :default => false, :null => false
24     UserRole.where(:role => "administrator").each do |role|
25       user = User.find(role.user_id)
26       user.administrator = true
27       user.save!
28     end
29     drop_table :user_roles
30     drop_enumeration :user_role_enum
31   end
32 end