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: 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? P> p>
5 Réponses :
avec Thor, si vous souhaitez appeler une tâche sans gestion de dépendance, vous venez de l'appeler directement:
model(foo) model(bar
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)
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 La manière inélégante consiste à aller dans le tableau code> @_ de Thor et supprimer les tâches de la première exécution avant de l'exécuter à nouveau. P> contrôleur code> générateur deux fois - Consultez la diapositive 43. P>
+1 - Après Invoquer: Méthode, [Arguments], Options CODE> Utilisez @_ Invocations.First [1] .pop code> Pour supprimer la tâche la plus récente appelée de la liste d'invocation.
Une pensée de plus, cette façon est également possible d'exécuter plusieurs modèles générateur sans migration
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
Voir aussi: Stackoverflow.com/Questtions/46370031/...