Comment créer et utiliser un module en utilisant Ruby on Rails 3?
J'utilise Ruby on Rails 3 et je voudrais déplacer du code personnalisé et partagé dans un module.
- Quelle syntaxe dois-je utiliser pour écrire le code du module?
- dans quel dossier de mon application je dois placer le fichier de module?
- Comment dois-je inclure ce module dans une ou plusieurs classes de contrôleur?
- quelle autre action, le cas échéant, dois-je utiliser le module personnalisé n'importe où dans mon application?
- Comment puis-je appeler des méthodes dans le module à partir de mon application?
Merci d'avance.
2 réponses
À 1. Un module est créé/ouvert en disant simplement:
module MyModule
def first_module_method
end
end
À 2. Le dossier lib
. Si vous voulez organiser vos modules dans le dossier lib
, vous pouvez les mettre dans des modules eux-mêmes. 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 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
À 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 l'inclure uniquement là où il est nécessaire afin de ne pas gonfler les classes qui n'en ont pas besoin de toute façon. Si vous voulez vraiment le module partout, incluez regarder la hiérarchie de classe de vos classes dans l'application. Voulez-vous le module dans tous les modèles? Vous pouvez ouvrir ActiveRecord::Base, et ajouter ajouter votre module.
A > 1. Vous pouvez utiliser la même syntaxe que toute autre classe ruby. Par exemple, je définis un module Vehicleclassifier qui va utiliser la méthode classify_vehicle pour classer un véhicule en fonction du nombre de roues qu'il reçoit 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 accès à tous les modules méthode.
En outre, dans le cas où vous devez utiliser un module à travers votre application, vous pouvez l'inclure dans votre contrôleur d'application.