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
)方法。因此,好像只有第一个参数实际上是由本机迁移生成器接收的。
实际上有办法做到这一点吗?
答案 0 :(得分:3)
通过使用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
。