2017-01-18 4 views
7

他の人は、他のテンプレートと同じように、コンテナアプリケーションにコピーされるマイグレーションテンプレートの記述方法を尋ねてきました。私たちはRailsの複数のメジャーバージョンで作業する必要がある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)メソッドを使用して作成されます。つまり、最初の引数だけがネイティブマイグレーションジェネレータによって実際に受信されているかのようです。

実際にこれを行う方法はありますか?

答えて

3

これは構文を生成キャメルケースを使用して私のためにうまく働いた:

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 

だから私はあなたを考えますちょうど求めている create_table_nameではなく、CreateTableNameの構文を使用します。

関連する問題