53 lines
1.5 KiB
Ruby
53 lines
1.5 KiB
Ruby
|
# 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
|