gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:39:38 25 4
gpt4 key购买 nike

我正在用 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

我希望它只是默默地忽略已经存在迁移的事实并继续进行下一次迁移。 执行此操作的最佳方法是什么?

编辑:

根据 Dmitry 的回答,这是我的解决方案:

  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

最佳答案

使用 migration_template以 Rails 为例,您或许可以检查 destination = self.class.migration_exists?(migration_dir, @migration_file_name) 如果迁移已经存在,则跳过 migration_template 调用。

关于ruby-on-rails - 通过生成器添加从 Rails 引擎 gem 到应用程序的新迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com