14

ruby gem で Rails エンジンを構築しています。これには、実行時に呼び出されるいくつかの移行が含まれています。

rails g myengine:install

ジェネレーターのコードは次のとおりです。

module MyEngine
  module Generators
    class InstallGenerator < ::Rails::Generators::Base
      include Rails::Generators::Migration

      source_root File.expand_path('../templates', __FILE__)

      # ...

      def copy_migrations
        migration_template "migrations/migration1.rb", "db/migrate/migration1.rb"
        migration_template "migrations/migration2.rb", "db/migrate/migration2.rb"
      end

      # ...
    end
  end
end

ただし、rails g myengine:installもう一度実行すると、次のエラーで失敗します。

Another migration is already named migration1: /Users/jh/Code/Web/demoapp/db/migrate/20130327222221_migration1.rb

すでに移行が行われているという事実を黙って無視し、次の移行に進みたいと思っています。これを行う最良の方法は何ですか?

編集:

ドミトリーの答えによると、これが私の解決策でした:

  def copy_migrations
    copy_migration "migration1"
    copy_migration "migration2"
  end

protected

  def copy_migration(filename)
    if self.class.migration_exists?("db/migrate", "#{filename}")
      say_status("skipped", "Migration #{filename}.rb already exists")
    else
      migration_template "migrations/#{filename}.rb", "db/migrate/#{filename}.rb"
    end
  end
4

1 に答える 1