2009-06-03 7 views
3

J'ai du code qui peut avoir besoin d'être appelé sur beaucoup d'endroits dans le contrôleur et le modèle, où dois-je mettre ce code? Et comment appeler ces méthodes alors?Où placer ces codes dans une application web Rails?

Merci

def self.number_of_months(start_date,to_date) 
    # Get how many months you want to view from the start months 
    (to_date.month - start_date.month) + (to_date.year - start_date.year) * 12 + 1 
end 

Répondre

2

Si cela est toujours utilisé avec un modèle je serais ont mis dans ce modèle. Le self. avant votre nom de méthode signifie que c'est une méthode de classe, donc si vous définissez la méthode comme ceci:

class Milestone < ActiveRecord::Base 
    def self.number_of_months(start_date,to_date) 
     # Get how many months you want to view from the start months 
     (to_date.month - start_date.month) + (to_date.year - start_date.year) * 12 + 1 
    end 
end 

utiliser cette fonctionnalité? En faisant ceci:

Milestone.number_of_months(date1,date2) 

Ou vous pouvez mettez-le dans le répertoire config/initializers. Par exemple, créez un fichier appelé date.rb dans le répertoire contenant:

class Date 
    def self.number_of_months(start_date,to_date) 
     # Get how many months you want to view from the start months 
     (to_date.month - start_date.month) + (to_date.year - start_date.year) * 12 + 1 
    end 
end 

Ce sera disponible en tant que méthode de classe à la classe Date.

Ma première réponse avant que je remarque que vous mentionnez la méthode doit être utilisée dans les contrôleurs et les modèles. Les assistants sont utilisés pour les vues, cela ne vous sera probablement pas utile.

Cela devrait être une méthode d'aide. Il y a un module d'aide pour chaque contrôleur, mais il y a aussi un module d'application. Cette méthode est bien à mettre là, assurez-vous simplement que ce n'est pas une méthode de classe (supprimer le self.). Si vous ne souhaitez pas ajouter la méthode à l'assistant d'application, vous pouvez utiliser la déclaration helper dans un contrôleur avec le module auxiliaire auquel il appartient, par exemple si la méthode est date_range_helper.rb, utilisez helper :date_range.

2

je mettrais dans la classe Date

class Date 
    def months_between(other) 
    (month - other.month).abs + 12 * (year - other.year).abs + 1 
    end 
end 
Questions connexes