2010-03-24 8 views
7

J'ai une action de contrôleur qui génère un certain nombre de rapports Excel, cela prend environ 10 minutes à faire. Parfois, je l'appelle depuis ma webapp, c'est pourquoi c'est une action.Comment puis-je appeler une action du contrôleur à partir d'une tâche rake?

Mais je veux aussi créer une tâche de rake pour l'exécuter, afin que je puisse programmer une exécution automatique une fois par nuit.

Un moyen de le faire?

+0

Comme le disent les autres, vous devez déplacer le code vers un modèle. Faire des choses sur les contrôleurs est une mauvaise pratique. – kikito

Répondre

3

Pouvez-vous gérer la génération de rapports à partir de vos modèles? Les modèles should be doing most of the work anyway et sont accessibles à partir de tâches Rake:

task :reports => :environment do 
    ... 
    # Do stuff with your models. 
end 
+1

Je ne pense pas, j'ai besoin de rendre des modèles XML pour générer les rapports Excel – Janak

3

Je pense que vous devrez déplacer votre code dans votre modèle. Puisqu'il est mauvais de mettre des connaissances sur le rendu de sortie dans les modèles, je suggère de mettre toute la logique métier et la manipulation des données dans le modèle, mais ensuite de mettre le code de rendu dans votre tâche de rake. Cela rendrait la tâche de rake analogue au contrôleur utilisé sur le web - en maintenant la séparation des préoccupations.

Vous pouvez regarder ActionView :: Base et travailler à partir de là pour comprendre comment déclencher le rendu des modèles.