Rails引擎,调用容器应用程序的本地迁移生成器

SO上的其他人已经问过(并已被回答)关于如何编写将像其他任何模板一样被复制到容器应用程序的迁移模板。 我们正在编写一个需要在Rails的多个主要版本中工作的Rails引擎,所以我们希望找到一种方法来使用应用程序的本地迁移生成器来生成迁移,而不是必须维护多个模板,或者需要编写一个可处理多个主要版本的复杂模板。

我在Rails引擎文档(9.12)中看到,你可以像这样调用其他生成器:

generate "scaffold", "forums title:string description:text"

发生器的名称及其参数是单个字符串。 但是,以下内容对我们不起作用:

generate 'migration', 'create_table_name column1:type ...'

对于我们来说,无论Rails的版本,一个迁移文件中使用适当的名称创建的,但空updown (或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

链接地址: http://www.djcxy.com/p/37915.html

上一篇: Rails engine, invoking container app's native migration generator

下一篇: Creating plot for black background presentation slides