sutty/db/migrate/20190706002615_migrate_from_habtm_to_roles.rb

53 lines
1.5 KiB
Ruby
Raw Normal View History

2019-07-08 16:40:41 +00:00
# frozen_string_literal: true
# Nos movemos de HABTM a una tabla de roles que nos permite tener otras
# características.
#
# No usamos ninguna feature de los modelos porque podemos haber borrado
# código. No queremos tener migraciones que luego no funcionen.
class MigrateFromHabtmToRoles < ActiveRecord::Migration[5.2]
def up
Site.all.each do |site|
%w[usuarie invitade].each do |rol|
table_name = rol.pluralize
join_table = ['sites', table_name].sort.join('_')
usuaries = Usuarie.find_by_sql("select usuaries.*
from usuaries
inner join #{join_table}
on #{join_table}.usuarie_id = usuaries.id
where #{join_table}.site_id = #{site.id}")
usuaries.each do |usuarie|
site.roles << Rol.create(site: site, usuarie: usuarie,
temporal: false, rol: rol)
end
end
end
drop_table :sites_usuaries
drop_table :invitades_sites
end
def down
%i[sites_usuaries invitades_sites].each do |table|
create_table table, id: false do |t|
t.belongs_to :site
t.belongs_to :usuarie
t.index %i[site_id usuarie_id], unique: true
end
end
Rol.all.each do |rol|
table_name = ['sites', rol.rol.pluralize].sort.join('_')
sql = "insert into #{table_name} (site_id, usuarie_id)
values (#{rol.site_id}, #{rol.usuarie_id});"
ActiveRecord::Base.connection.execute(sql)
end
drop_table :roles
end
end