0

Railsアプリケーションから列を追加するための移行を作成したい(を介してではなくrails g migration xxxx)、移行の作成中に、後で可能なダウン操作のために移行のためにバージョン番号を保存したい。

シナリオは、一般化されたテーブルとそのフィールドを持つアプリケーションを持っているということです。アプリケーションは、複数の顧客に展開できます。テーブルにカスタム フィールドを定義する方法を提供したいと考えています。ユーザーが table_name、field_name、data_type などの目的のデータを選択/入力したら、新しい移行を作成してフィールドを追加し、バージョン番号をデータベースのどこかに保存します。このバージョン番号はmigrate:down、ユーザーがフィールドを削除する場合に使用されます。

これよりも良いアプローチはありますか?

4

1 に答える 1

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

この方法では、create migration コマンドの出力をファイルにリダイレクトし、ファイルから移行番号を取得してデータベースに保存しました。

于 2011-03-15T13:45:32.523 に答える