Создать миграцию из приложения - PullRequest
0 голосов
/ 04 марта 2011

Я хочу создать миграции, чтобы добавить столбцы из моего приложения rails (не через rails g migration xxxx), при создании миграции я хочу сохранить номер версии для миграции для последующей возможной операции отключения.

Сценарий такой: у меня есть приложение с обобщенными таблицами и их полями. Приложение может быть развернуто для нескольких клиентов. Я хочу предоставить способ определения пользовательских полей в таблице. Как только пользователь выберет / введет нужные данные, такие как имя_таблицы, имя_поля, тип_данных и т. Д., Я создам новую миграцию, чтобы добавить поле и сохранить номер версии где-нибудь в базе данных. Этот номер версии будет использоваться для migrate:down в случае, если пользователь решит удалить поле.

Есть ли другой лучший подход, чем этот?

1 Ответ

1 голос
/ 15 марта 2011

Я реализовал это, как показано ниже: В зависимости от 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

В этом методе я перенаправил вывод команды создания миграции в файли извлекая номер миграции из файла, а затем сохраняя его в базе данных.

...