]> git.openstreetmap.org Git - rails.git/blob - db/migrate/044_create_user_roles.rb
Merge remote-tracking branch 'upstream/pull/4716'
[rails.git] / db / migrate / 044_create_user_roles.rb
1 class CreateUserRoles < ActiveRecord::Migration[4.2]
2   class User < ApplicationRecord
3   end
4
5   class UserRole < ApplicationRecord
6   end
7
8   def self.up
9     create_enum :user_role_enum, %w[administrator moderator]
10
11     create_table :user_roles do |t|
12       t.column :user_id, :bigint, :null => false
13       t.column :role, :user_role_enum, :null => false
14
15       t.timestamps :null => true
16     end
17
18     User.where(:administrator => true).each do |user|
19       UserRole.create(:user_id => user.id, :role => "administrator")
20     end
21
22     remove_column :users, :administrator
23
24     add_foreign_key :user_roles, :users, :name => "user_roles_user_id_fkey"
25   end
26
27   def self.down
28     add_column :users, :administrator, :boolean, :default => false, :null => false
29
30     UserRole.where(:role => "administrator").each do |role|
31       user = User.find(role.user_id)
32       user.administrator = true
33       user.save!
34     end
35
36     drop_table :user_roles
37     drop_enumeration :user_role_enum
38   end
39 end