J’ai quelques méthodes de contrôleur, que je voudrais partager. Quelle est la meilleure pratique pour y parvenir en ruby on rails ? Je devrais créer une classe abstraite qui étendent mes contrôleurs, ou devrais-je créer module et ajoutez-le à chaque contrôleur ? Voici les méthodes de contrôleur, que j’ai envie de partager :
Réponses
Trop de publicités?À mon avis, normal OO principes de conception s'appliquent:
- Si le code est vraiment un ensemble d'utilitaires qui n'a pas besoin d'accéder à l'état d'objet, je voudrais envisager de le mettre dans un module appelé séparément. Par exemple, si le code est tout de cartographie de services publics, créer un module
Maps
, et l'accès aux méthodes comme:Maps::driving_directions
. - Si le code des besoins de l'état et est utilisé ou peut être utilisé dans chaque contrôleur, placez le code dans ApplicationController.
- Si le code d'état, et est utilisé dans un sous-ensemble de tous les contrôleurs qui sont étroitement et logique (c'est à dire tous les propos de cartes), puis de créer une classe de base (
class MapController < ApplicationController
) et de mettre le code partagé. - Si le code d'état, et est utilisé dans un sous-ensemble de tous les contrôleurs qui ne sont pas étroitement liées, le mettre dans un module et de l'inclure dans les contrôleurs nécessaires.
Dans votre cas, la méthode de l'état (params
), de sorte que le choix dépend de la relation logique entre les contrôleurs qui en ont besoin.
En outre:
Aussi:
- Utilisation partiels lorsque c'est possible pour code à répétition et les placer dans une commune "partiels" répertoire ou se faire via un chemin d'accès spécifique.
- S'en tenir à une approche RESTful lorsque cela est possible (pour les méthodes) et si vous vous trouvez créer un grand nombre de non-Sommeil méthodes d'envisager de leur extraction à leur propre contrôleur.
Je pense en fait que d'un module est la meilleure façon de partager du code entre les contrôleurs. Les aides sont bonnes si vous souhaitez partager du code entre les points de vue. Les aides sont essentiellement glorifié modules, donc si vous n'avez pas besoin d'afficher le niveau d'accès, je suggère de placer un module dans votre dossier lib.
Une fois que vous créez le module, vous devez utiliser l'instruction include pour inclure dans les contrôleurs.
Si vous souhaitez partager des codes entre contrôleur et aides, alors vous devriez essayer de créer un module bibliothèque. Vous pouvez utiliser @template et @controller pour accéder à la méthode de contrôleur et d’assistance aussi bien. Cochez-le pour plus de détails http://www.shanison.com/?p=305