2012-07-09 69 views
0

當我用這個代碼如何使用Rails :: Generators.invoke(「active_record:migration」)生成創建表遷移文件?

Rails::Generators.invoke("active_record:migration","create_tests",{:behavior=>:invoke, :destination_root=>Rails.root}) 

生成遷移文件,我產生了以下類:

class CreateTests < ActiveRecord::Migration 
    def up 
    end 

    def down 
    end 
end 

但我想是這樣的:

class CreateTests < ActiveRecord::Migration 
    def change 
    create_table :tests do |t| 

     t.timestamps 
    end 
    end 
end 

我不知道我需要在invoke方法中傳遞哪些參數。

回答

0

您可以創建模板文件並將其用於生成目的。

class CoolMessageGenerator < Rails::Generators::Base 
     source_root File.expand_path('../templates', __FILE__) 
     argument :model_name, :type => :string, :default => 'CoolMessage' 

     def migration 
     template 'cool_migration.rb', 
       File.join('db', 'migrate', "#{Time.now.to_i}_create_#{model_name.tableize}.rb") 
     end 
    end 

並在同一目錄下的templates/cool_migration.rb:

class Create<%= model_name.pluralize %> < ActiveRecord::Migration 
    def change 
    create_table :<%= model_name.tableize %> do |t| 
     t.timestamps 
    end 
    end 
end