2010-03-06 8 views
1

Lorsque mon projet est en cours, j'ai besoin d'écrire des méthodes, mais les méthodes et aides privées de application_controller ne fournissent pas assez d'espace pour stocker toutes les extensions. J'ai donc regardé les classes et méthodes personnalisées, qui sont stockées dans le dossier/lib.Organisation des assistants, des méthodes et des classes

Mais j'ai encore quelques questions, que je ne peux pas résoudre:

-Quand dois-je utiliser « classe < < soi »? J'ai une classe, pour calculer la différence entre deux tableaux de nombres, puis retourne un nouveau tableau avec une valeur moyenne de ces nombres. Je l'habitude de ce code:

x = MyClass.new 
x.calculate(array1, array2) 

Et puis je l'ai placé mes méthodes de classe dans « classe < < auto, fin » d'utiliser la classe sans initialisation. Est-ce la bonne solution?

-Quand devrais-je utiliser des modules personnalisés? Est-il toujours nécessaire de «l'inclure» ou de «l'exiger»? Parlez-moi de vos modules dans vos projets, quand les utilisez-vous?

-Comment puis-je appeler la méthode d'assistance dans le contrôleur? Je veux utiliser dans ajax responce. Par exemple, j'utilise la méthode d'assistance 'users_for_output', et s'il y avait un appel ajax, mon application devrait afficher uniquement les utilisateurs sous forme de texte, pour le traiter avec javascript après.

Répondre

1

1) Vous n'avez pas à instancier la classe pour appeler une méthode statique, à savoir

MyUtil.do_something 

Vs.

MyUtil.new.do_something 

Dans mon projet, je garde ces méthodes statiques.

2) Vous pouvez utiliser des modules lorsque vous souhaitez partager un ensemble de fonctionnalités entre classes. Lire this mixin vs discussion sur l'héritage. Vous aurez une bonne idée de quand utiliser les modules.

2.1) La méthode included est destinée à l'initialisation des variables du module. Vous n'avez pas besoin de l'utiliser si vous n'avez rien initialisé.

3) Si vous souhaitez exposer une méthode de contrôleur en tant que méthode d'assistance, utilisez l'appel helper_method dans votre classe ApplicationController.

class ApplicationController < ActionController::Base 
    helper_method :user_for_output 
end 
Questions connexes