2013-01-08 13 views
5

Sto provando ad estendere il generatore di modelli in Rails (modello rails g). Fondamentalmente il mio generatore dovrebbe fare la stessa cosa del modello, ma copiare 2 file aggiuntivi. Semplice come quella.Rails: come estendere un generatore?

Ho recensito Railscast n. 218 (http://railscasts.com/episodes/218-making-generators-in-rails-3) che è stato molto istruttivo ma non sono riuscito a trovare alcuna informazione sull'estensione dei generatori.

Controllare il codice sorgente dei binari, sembra che il generatore del modello sia in lib/rails/generatori/rails/model/model_generator.rb definito come Rails :: Generators :: ModelGenerator.

ho cercato di fare il mio generatore estendere questa classe, ma si traduce in:

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

E i miei tentativi di richiedere questo file non hanno avuto successo.

Quindi ho deciso di fermarmi e chiedere qui. Qual è il modo corretto di estendere un generatore?

+0

Hai letto questa guida? http://edgeguides.rubyonrails.org/generators.html – MikDiet

+0

@Mik_Die sì, ma non parla di estendere un generatore. Fa menzione del metodo di generazione, ma non è quello che voglio. Esempio: voglio accettare tutti i parametri accettati dal generatore di modelli. – Fernando

risposta

1

Dai un'occhiata ai ganci e invoca.

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 

Spero che questo aiuto.

1
  1. generare il generatore personalizzato:

    rails generate generator my_model 
    
  2. Aprire lib/generators/my_model/my_model_generator.rb e modificarla in:

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

Questo funziona per i motori di rotaie. Non dimenticare di aggiungere i modelli richiesti.