ruby-on-rails – 将新的迁移从Rails引擎gem添加到应用程序通过生成器

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 将新的迁移从Rails引擎gem添加到应用程序通过生成器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在建立一个ruby宝石的Rails引擎.它包括当您运行时调用的一些迁移:
  1. rails g myengine:install

生成器中的代码如下:

  1. module MyEngine
  2. module Generators
  3. class InstallGenerator < ::Rails::Generators::Base
  4. include Rails::Generators::Migration
  5.  
  6. source_root File.expand_path('../templates',__FILE__)
  7.  
  8. # ...
  9.  
  10. def copy_migrations
  11. migration_template "migrations/migration1.rb","db/migrate/migration1.rb"
  12. migration_template "migrations/migration2.rb","db/migrate/migration2.rb"
  13. end
  14.  
  15. # ...
  16. end
  17. end
  18. end

但是,如果我运行rails g myengine:再次安装,则会失败,并显示错误

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

我希望它只是默默地忽略已经有迁移的事实,并继续下一次迁移.这样做最好的方法是什么?

编辑:

根据德米特里的回答,这是我的解决办法:

  1. def copy_migrations
  2. copy_migration "migration1"
  3. copy_migration "migration2"
  4. end
  5.  
  6. protected
  7.  
  8. def copy_migration(filename)
  9. if self.class.migration_exists?("db/migrate","#{filename}")
  10. say_status("skipped","Migration #{filename}.rb already exists")
  11. else
  12. migration_template "migrations/#{filename}.rb","db/migrate/#{filename}.rb"
  13. end
  14. end

解决方法

在Rails中使用 migration_template作为示例,您可以检查destination = self.class.migration_exists?(migration_dir,@migration_file_name),如果迁移已存在,请跳过进行migration_template调用.

猜你在找的Ruby相关文章