Rails引擎,调用容器应用程序的本地迁移生成器
SO上的其他人已经问过(并已被回答)关于如何编写将像其他任何模板一样被复制到容器应用程序的迁移模板。 我们正在编写一个需要在Rails的多个主要版本中工作的Rails引擎,所以我们希望找到一种方法来使用应用程序的本地迁移生成器来生成迁移,而不是必须维护多个模板,或者需要编写一个可处理多个主要版本的复杂模板。
我在Rails引擎文档(9.12)中看到,你可以像这样调用其他生成器:
generate "scaffold", "forums title:string description:text"
发生器的名称及其参数是单个字符串。 但是,以下内容对我们不起作用:
generate 'migration', 'create_table_name column1:type ...'
对于我们来说,无论Rails的版本,一个迁移文件中使用适当的名称创建的,但空up
和down
(或change
)的方法。 因此,就好像只有第一个参数实际上被本机迁移生成器接收。
事实上有没有办法做到这一点?
这对我来说很好,使用camel case生成语法:
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
。
上一篇: Rails engine, invoking container app's native migration generator