【问题标题】:Create migration from application从应用程序创建迁移
【发布时间】:2011-03-04 12:55:25
【问题描述】:

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

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

还有比这更好的方法吗?

【问题讨论】:

    标签: mysql ruby-on-rails-3 migration rails-migrations


    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2014-12-07
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      相关资源
      最近更新 更多