0

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

场景是,我有一个包含通用表及其字段的应用程序。该应用程序可以为多个客户部署。我想提供一种在表中定义自定义字段的方法。一旦用户选择/输入所需的数据,如 table_name、field_name、data_type 等。我将创建一个新迁移以添加字段并将版本号存储在数据库中的某处。migrate:down如果用户决定删除该字段,将使用此版本号。

还有比这更好的方法吗?

4

1 回答 1

1

field_name我已经实现了如下:取决于table_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

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

于 2011-03-15T13:45:32.523 回答