81 votes

Méthodes conseillées pour la réutilisation de code entre les contrôleurs de Ruby on Rails

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 :

111voto

Ian Terrell Points 6551

À 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.

32voto

OnionBomb Points 23

Je sais que cette question a été posée il y a 6 ans. Je veux juste faire remarquer que dans 4 Rails, il y a maintenant des préoccupations de contrôleur qui êtes plus hors de la solution de la boîte.

15voto

danpickett Points 1527

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.

http://www.rubyist.net/~slagell/ruby/modules.html

1voto

Christoph Schiessl Points 3672

Je suis d’accord avec l’approche de module. Créer un fichier distinct de Ruby dans votre répertoire lib et mettre le module dans le nouveau fichier.

La manière la plus évidente consisterait à ajouter des méthodes à votre ApplicationController, mais je suis sûr que vous le savez déjà.

1voto

Shanison Points 1757

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X