【问题标题】: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_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
在这种方法中,我将创建迁移命令的输出重定向到一个文件,并从该文件中检索迁移编号,然后将其存储到数据库中。