SO 上的其他人已经询问(并已回答)如何编写迁移模板,该模板将像任何其他模板一样复制到容器应用程序。我们正在编写一个需要在多个主要版本的 Rails 中工作的 Rails 引擎,所以我们希望找到一种方法来使用应用程序的原生迁移生成器来生成迁移,而不是必须维护多个模板,或者需要编写一个可以处理多个主要版本的复杂模板。
我在the Rails engine documentation看到过(9.12) 你可以像这样调用其他生成器:
generate "scaffold", "forums title:string description:text"
其中生成器的名称及其参数是单个字符串。但是,以下对我们不起作用:
generate 'migration', 'create_table_name column1:type ...'
对于我们来说,无论 Rails 版本如何,都会创建一个具有正确名称但为空的迁移文件
up
和 down
(或 change
)方法。所以就好像本地迁移生成器实际上只接收第一个参数一样。实际上有没有办法做到这一点?
最佳答案
通过使用 Camel 案例生成语法,这对我来说很好用:lib/generators/test_generator.rb
class TestGenerator < Rails::Generators::Base
def build_table
generate 'migration', 'CreateFoo name:string'
end
end
rails g test
创建迁移:db/migrate/20170128040004_create_foo.rb
class CreateFoo < ActiveRecord::Migration[5.0]
def change
create_table :foos do |t|
t.string :name
end
end
end
所以我认为你只需要使用语法
CreateTableName
而不是 create_table_name
.
关于ruby-on-rails - Rails 引擎,调用容器应用的原生迁移生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728556/