2013-01-08 19 views
5

我想在Rails(rails g model)中擴展模型生成器。基本上我的發電機應該做與模型1相同的事情,但複製2個額外的文件。就那麼簡單。Rails:如何擴展發生器?

我回顧了Railscast#218(http://railscasts.com/episodes/218-making-generators-in-rails-3)這是非常翔實的,但我找不到任何有關擴展發電機的信息。

檢查軌道的源代碼,它看起來像模型生成器是在LIB /軌道/發電機/軌道/模型/定義爲滑軌::發電機:: ModelGenerator model_generator.rb。

我努力使自己的發電機擴展此類,但它導致:

Error: uninitialized constant Rails::Generators::ModelGenerator. 

而我試圖要求該文件沒有成功。

所以我決定停下來問問。什麼是擴展發生器的正確方法?

+0

您是否閱讀過本指南? http://edgeguides.rubyonrails.org/generators.html – MikDiet

+0

@Mik_Die是的,但它沒有提到任何關於擴展生成器的內容。它確實提到了生成方法,但這不是我想要的。例如:我想接受模型生成器接受的所有參數。 – Fernando

回答

1

看看鉤子和調用。

class MyGenerator < Rails::Generators::Base 
    def create_my_file 
    # Do your generators stuff 
    create_file "config/initializers/my.rb", "# Add content here" 
    # Create model 
    invoke("model", ["model_name", "arg1", "arg2"]) 
    end 
end 

希望這有助於。

1
  1. 生成自定義生成器:

    rails generate generator my_model 
    
  2. 打開lib/generators/my_model/my_model_generator.rb並將其更改爲:

    require 'rails/generators/active_record/model/model_generator' 
    
    class MyModelGenerator < ActiveRecord::Generators::ModelGenerator 
        source_root File.expand_path('../templates', __FILE__) 
    end 
    

這適用於軌道發動機。不要忘記添加必需的模板。