2011-03-04 97 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 

在該方法我已經重定向創建遷移命令到一個文件的輸出和檢索遷移數從文件中,然後將其存儲到數據庫。