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.

  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ôleur?
  4. quelle autre action, le cas échéant, dois-je utiliser le module personnalisé n'importe où dans mon application?
  5. Comment puis-je appeler des méthodes dans le module à partir de mon application?

Merci d'avance.

89
demandé sur Zinc 2011-02-05 15:54:45

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.

111
répondu Stephan 2011-02-05 18:07:29

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.

3
répondu Shreyas 2011-11-17 14:41:55