Comment créer et utiliser un module en utilisant Ruby on Rails 3?

J’utilise Ruby on Rails 3 et j’aimerais déplacer du code personnalisé et partagé dans un module.

  1. Quelle syntaxe dois-je utiliser pour écrire le code du module?
  2. Dans quel dossier de mon application je dois placer le fichier de module?
  3. Comment dois-je inclure ce module dans une ou plusieurs classes de contrôleurs?
  4. Quelle autre action, le cas échéant, dois-je utiliser pour utiliser le module personnalisé dans mon application?
  5. Comment puis-je appeler des méthodes dans le module à partir de mon application?

Merci d’avance.

Pour 1. Un module est créé / ouvert simplement en disant:

module MyModule def first_module_method end end 

Pour 2. Le dossier lib . Si vous souhaitez organiser vos modules dans le dossier lib , vous pouvez les placer eux-mêmes dans des modules. Par exemple, si vous vouliez un sous-dossier super_modules vos modules seraient définis comme suit:

 module SuperModules module MyModule def first_module_method end end end 

À 3/5. Lorsque vous incluez le module dans une classe, vous pouvez simplement appeler les méthodes des modules comme si elles étaient définies dans la classe:

 class MyClass include MyModule def some_method first_module_method #calls module method end end 

Pour 4. Frst, assurez-vous que votre module est vraiment nécessaire dans chaque classe de votre application. Si ce n’est pas le cas, il est logique de ne l’inclure que là où il est nécessaire pour ne pas gonfler les classes qui n’en ont pas besoin. Si vous voulez vraiment le module partout, incluez la hiérarchie de classes de vos classes dans l’application. Voulez-vous le module dans tous les modèles? Vous pouvez ouvrir ActiveRecord :: Base et y append votre module.

A> 1. Vous pouvez utiliser la même syntaxe que toute autre classe Ruby. Par exemple, je définis un module VehicleClassifer qui utilisera la méthode classify_vehicle pour classer un véhicule en fonction du nombre de roues reçues en entrée.

 module VehicleClassifer def classify_vehicle(number_of_wheels) VehicleType.where("number_of_wheels = ?", number_of_wheels) end end 

A> 2. Les modules sont généralement stockés dans le dossier / lib.

les questions 3,4,5 ont plus ou moins la même réponse. vous pouvez utiliser

 class SomeController < ApplicationController include VehicleClassfier def index classify_vehicle(4) end end 

dans la classe vous utilisez le module et vous aurez access à toutes les méthodes du module.

En outre, si vous devez utiliser un module via votre application, vous pouvez l'inclure dans votre contrôleur d'application.