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.
41 lines
1,009 B
Ruby
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
|