openstreetmap-website/db/migrate/044_create_user_roles.rb
Andy Allan 6ebb21b660 Avoid using live models in old migrations
Instead, we define models in the migrations themselves. This ensures that
column names etc match the state of the database during the migration,
not the current live version of the model.
2019-07-17 11:52:02 +02:00

41 lines
1,009 B
Ruby

require "migrate"
class CreateUserRoles < ActiveRecord::Migration[4.2]
class User < ActiveRecord::Base
end
class UserRole < ActiveRecord::Base
end
def self.up
create_enumeration :user_role_enum, %w[administrator moderator]
create_table :user_roles do |t|
t.column :user_id, :bigint, :null => false
t.column :role, :user_role_enum, :null => false
t.timestamps :null => true
end
User.where(:administrator => true).each do |user|
UserRole.create(:user_id => user.id, :role => "administrator")
end
remove_column :users, :administrator
add_foreign_key :user_roles, :users, :name => "user_roles_user_id_fkey"
end
def self.down
add_column :users, :administrator, :boolean, :default => false, :null => false
UserRole.where(:role => "administrator").each do |role|
user = User.find(role.user_id)
user.administrator = true
user.save!
end
drop_table :user_roles
drop_enumeration :user_role_enum
end
end