【问题标题】:Rails engine, invoking container app's native migration generatorRails 引擎,调用容器应用的原生迁移生成器
【发布时间】:2017-06-03 08:54:03
【问题描述】:

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

我在the Rails engine documentation (9.12) 中看到您可以像这样调用其他生成器:

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

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

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

对于我们来说,无论 Rails 版本如何,都会使用正确的名称创建迁移文件,但要使用空的 updown(或 change)方法。因此,就好像本地迁移生成器实际上只接收了第一个参数。

实际上有办法做到这一点吗?

【问题讨论】:

    标签: ruby-on-rails migration generator


    【解决方案1】:

    使用驼峰式生成语法对我来说效果很好:

    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

    【讨论】:

      猜你喜欢
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 2012-09-24
      • 2013-02-16
      相关资源
      最近更新 更多