2011-03-04 67 views
0

我想创建迁移以从我的Rails应用程序(而不是通过rails g migration xxxx)添加列,同时创建迁移我想将版本号存储到迁移中以供将来可能的停机操作使用。从应用程序创建迁移

这种情况是,我有一个应用程序与广义表和他们的领域。该应用程序可以为多个客户部署。我想提供一种方法来定义表中的自定义字段。一旦用户选择/输入像table_name,field_name,data_type等所需的数据,我将创建一个新的迁移来添加字段并将版本号存储在数据库中的某处。如果用户决定删除该字段,该版本号将用于migrate:down

有没有比这更好的方法?

回答

1

我已经实现这个如下: 取决于field_nametable_name创建使用迁移:

def create_migration 
    field_name_for_db = field_name.gsub(' ', '_').downcase 
    migration_name = "add_column_#{self.field_name}_to_#{self.table_name}" 
    logger.info "cd #{Rails.root} && rails g migration #{migration_name} #{self.field_name}:string > #{Rails.root}/tmp/migration_details.txt && rake db:migrate" 
    system "cd #{Rails.root} && rails g migration #{migration_name} #{self.field_name}:string > #{Rails.root}/tmp/migration_details.txt && rake db:migrate" 
    migration_version = File.read("#{Rails.root}/tmp/migration_details.txt").split('/').last.split("_#{migration_name}").first 
    self.migration_name = migration_name 
    self.migration_version = migration_version 
    self.save 
    end 

在该方法我已经重定向创建迁移命令到一个文件的输出和检索迁移数从文件中,然后将其存储到数据库。