mirror of
				https://github.com/scinote-eln/scinote-web.git
				synced 2025-10-25 21:47:03 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class AddExperimentLevel < ActiveRecord::Migration[4.2]
 | |
|   def up
 | |
|     # Create experiments table
 | |
|     create_table :experiments do |t|
 | |
|       t.string :name, null: false
 | |
|       t.text :description
 | |
|       t.integer :project_id, null: false
 | |
|       t.integer :created_by_id, null: false
 | |
|       t.integer :last_modified_by_id, null: false
 | |
|       t.boolean :archived, null: false, default: false
 | |
|       t.integer :archived_by_id
 | |
|       t.datetime :archived_on
 | |
|       t.integer :restored_by_id
 | |
|       t.datetime :restored_on
 | |
| 
 | |
|       t.timestamps null: false
 | |
|     end
 | |
|     add_foreign_key :experiments, :users, column: :created_by_id
 | |
|     add_foreign_key :experiments, :users, column: :last_modified_by_id
 | |
|     add_foreign_key :experiments, :users, column: :archived_by_id
 | |
|     add_foreign_key :experiments, :users, column: :restored_by_id
 | |
|     add_index :experiments, :name
 | |
|     add_index :experiments, :project_id
 | |
|     add_index :experiments, :created_by_id
 | |
|     add_index :experiments, :last_modified_by_id
 | |
|     add_index :experiments, :archived_by_id
 | |
|     add_index :experiments, :restored_by_id
 | |
| 
 | |
|     add_column :my_modules, :experiment_id, :integer, default: 0
 | |
|     add_column :my_module_groups, :experiment_id, :integer, default: 0
 | |
| 
 | |
|     # Iterate through all projects
 | |
|     Project.find_each do |project|
 | |
|       my_modules = MyModule.where('project_id = ?', project.id)
 | |
|       my_module_groups = MyModuleGroup.where('project_id = ?', project.id)
 | |
| 
 | |
|       if my_modules.count > 0
 | |
|         # Create an experiment
 | |
|         owner = project.user_projects.where(role: 0).first.user
 | |
|         exp = Experiment.create(
 | |
|           name: 'Test experiment',
 | |
|           project: project,
 | |
|           created_by: owner,
 | |
|           last_modified_by: owner
 | |
|         )
 | |
| 
 | |
|         # Assign all modules onto new experiment
 | |
|         my_modules.find_each do |mm|
 | |
|           mm.update_column(:experiment_id, exp.id)
 | |
|         end
 | |
| 
 | |
|         if my_module_groups.count > 0
 | |
|           # Also assign all module groups onto new experiment
 | |
|           my_module_groups.find_each do |mmg|
 | |
|             mmg.update_column(:experiment_id, exp.id)
 | |
|           end
 | |
|         end
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     change_column_null :my_modules, :experiment_id, false
 | |
|     remove_column :my_modules, :project_id
 | |
|     add_foreign_key :my_modules, :experiments, column: :experiment_id
 | |
|     add_index :my_modules, :experiment_id
 | |
| 
 | |
|     change_column_null :my_module_groups, :experiment_id, false
 | |
|     remove_column :my_module_groups, :project_id
 | |
|     add_foreign_key :my_module_groups, :experiments, column: :experiment_id
 | |
|     add_index :my_module_groups, :experiment_id
 | |
|   end
 | |
| 
 | |
|   def down
 | |
|     add_column :my_modules, :project_id, :integer, default: 0
 | |
|     add_column :my_module_groups, :project_id, :integer, default: 0
 | |
| 
 | |
|     # Update reference to projects from modules
 | |
|     MyModule.find_each do |mm|
 | |
|       exp = Experiment.where('id = ?', mm[:experiment_id]).take
 | |
|       project = Project.where('id = ?', exp[:project_id]).take
 | |
|       mm.update_column(:project_id, project.id)
 | |
|     end
 | |
| 
 | |
|     # Update reference to projects from module groups
 | |
|     MyModuleGroup.find_each do |mmg|
 | |
|       exp = Experiment.where('id = ?', mmg[:experiment_id]).take
 | |
|       project = Project.where('id = ?', exp[:project_id]).take
 | |
|       mmg.update_column(:project_id, project.id)
 | |
|     end
 | |
| 
 | |
|     change_column_null :my_modules, :project_id, false
 | |
|     remove_index :my_modules, column: :experiment_id
 | |
|     remove_foreign_key :my_modules, column: :experiment_id
 | |
|     remove_column :my_modules, :experiment_id
 | |
|     change_column_null :my_module_groups, :project_id, false
 | |
|     remove_index :my_module_groups, column: :experiment_id
 | |
|     remove_foreign_key :my_module_groups, column: :experiment_id
 | |
|     remove_column :my_module_groups, :experiment_id
 | |
| 
 | |
|     # Drop experiments table
 | |
|     remove_index :experiments, column: :name
 | |
|     remove_index :experiments, column: :project_id
 | |
|     remove_index :experiments, column: :created_by_id
 | |
|     remove_index :experiments, column: :last_modified_by_id
 | |
|     remove_index :experiments, column: :archived_by_id
 | |
|     remove_index :experiments, column: :restored_by_id
 | |
|     remove_foreign_key :experiments, column: :created_by_id
 | |
|     remove_foreign_key :experiments, column: :last_modified_by_id
 | |
|     remove_foreign_key :experiments, column: :archived_by_id
 | |
|     remove_foreign_key :experiments, column: :restored_by_id
 | |
|     drop_table :experiments
 | |
|   end
 | |
| end
 |