10
votes

Appeler la tâche plus d'une fois dans Rails 3 générateur

J'écris un Rails 3 générateur qui crée deux modèles différents. Voici un exemple très simplifié de ce que j'essaie de faire: xxx

Le problème est que le Méthode THOR InvoKe invoque une seule tâche une fois, le deuxième appel à la tâche" modèle "ne se produit jamais et le modèle" bar "n'est jamais créé. Est-ce que quelqu'un connaît un moyen élégant d'accomplir cela, de préférence d'une manière qui ne casse pas la capacité de lancer des "rails détruire" avec le générateur?


5 Réponses :


2
votes

avec Thor, si vous souhaitez appeler une tâche sans gestion de dépendance, vous venez de l'appeler directement:

model(foo)
model(bar


0 commentaires

1
votes

Si vous souhaitez exécuter un générateur, les sous-classes de Thor :: Group, c'est-à-dire une seule tâche Thor, vous pouvez appeler un générateur complet de tout fichier différent.

Rails::Generators.invoke("my_generator", my_generator_args)


0 commentaires

1
votes

Je ne connais pas d'une façon élégante de faire ça. Dans Cette conversation , j'ai donné un exemple de générateur personnalisé qui invoque le contrôleur générateur deux fois - Consultez la diapositive 43.

La manière inélégante consiste à aller dans le tableau @_ de Thor et supprimer les tâches de la première exécution avant de l'exécuter à nouveau.


1 commentaires

+1 - Après Invoquer: Méthode, [Arguments], Options Utilisez @_ Invocations.First [1] .pop Pour supprimer la tâche la plus récente appelée de la liste d'invocation.



3
votes

Une pensée de plus, cette façon est également possible d'exécuter plusieurs modèles générateur sans migration xxx


0 commentaires

0
votes

Il y a une méthode macro appelée "comportement" peut aider (en utilisant l'exemple de Bonyiii):

def generate_model
  Rails::Generators.invoke("active_record:model", ["foo", "--no-migration"], behavior: behavior)
  Rails::Generators.invoke("active_record:model", ["bar", "--no-migration"], behavior: behavior)
end


0 commentaires