2010-11-02 17 views
9

j'ai écrit mon propre générateur, de la console de son lancement comme celui-ciComment invoquer des générateurs à partir du code?

rails generate ead_document TechnicalOpinion --document_type_id=1 

Il crée le modèle et la migration. Je veux exécuter le générateur de mon contrôleur sans utiliser la commande de système de ruby. Y'a-t'il un quelconque moyen d'y arriver?

Répondre

15

solution semble être assez simple:

Ce code dans le contrôleur

Rails::Generators.invoke("ead_document", [@document_type.table_name.classify, "--document_type_id=#{@document_type.id}"]) 

est le même que celui dans console

rails generate ead_document TechnicalOpinion --document_type_id=1 
+3

Pourriez-vous s'il vous plaît ouvrir une nouvelle question sur l'API plutôt que de répondre à une question? De cette façon, nous avons les questions et les réponses consultables. –

0

en ruby ​​il y a plusieurs façons d'exécuter la commande du système

string = `ls` 
# runs command and returns its STDOUT as a string 
string = %x{ls} 
# ditto, alternative syntax 

system "ls" 
# runs command and returns its exit status; its STDOUT gets output to our STDOUT 

print `ls` 
#The same, but with back quotes 

exec "ls" 
# replace current process with another 

# call system command and read output asynchronously 
io = IO.popen('ls') 
# ... later 
io.each {|line| puts line} 
+2

Je sais que je peux le faire en exécutant un script en ligne de commande. Je veux ça à partir du code Ruby. Generator est une classe donc je veux faire une instance de cette classe et appeler une méthode dessus. –