If you want to add a migration file from lib file or somewhere from your ruby file and execute it, use the dynamic method which can create a class or method dynamically. The following code snippet is not complete. But gives a better idea to create migration file dynamically. Use a bit of metaprogramming.
def create_columns(tb_with_cols) ......... ......... columns.each { |column| add_columns << "\tadd_column(':#{tb_name}', :#{column})\n" } columns end def migration_file_content(tb_with_cols) <<-RUBY class AddMissingColumnsToTable < ActiveRecord::Migration def change_table #{create_columns(tb_with_cols)} end end RUBY end def write_content_to_file(path, content) File.open(path, 'w+') do |f| f.write(content) end end
Just call the method ‘migration_file_content’ in your code. Pass the parameter tb_with_cols as a Hash whose key is the table_name and value is the columns that should be added to that table like:
tb_with_cols = {:users => {:name => :string, :age => :integer, :address => :text} }
After that just call the method ‘write_content_to_file’ with your new migration file path and the content from our ‘migration_file_content’ method. 🙂