91 votes

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

Je suis à l'aide de Ruby on Rails 3 et j'aimerais passer quelques personnalisé et partagé code dans un module.

  1. Quelle syntaxe utiliser pour écrire le code du module?
  2. Dans le dossier de mon application, je dois placer le fichier de module?
  3. Comment j'ai inclure ce module dans une ou plusieurs classes de contrôleur?
  4. Quelles sont les autres mesures, 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 à l'avance.

118voto

Stephan Points 1527

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

module MyModule
  def first_module_method
  end
end

2. L' lib le dossier. Si vous souhaitez organiser vos modules dans l' lib le dossier, vous pouvez les mettre dans des modules eux-mêmes. Par exemple, si vous souhaitez créer un sous-dossier super_modules vos modules sera définie comme suit:

module SuperModules
  module MyModule
    def first_module_method
    end
  end
end

3./5. Lorsque y compris le module dans une classe, vous pouvez simplement appeler les modules de méthodes comme si elles ont été définies au sein de la classe:

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

4. En premier, assurez-vous que votre module est vraiment nécessaire dans toutes les classes de votre application. Si cela n'est-il pas de sens pour inclure uniquement lorsque cela est nécessaire afin de ne pas gonfler les classes qui n'ont pas besoin de toute façon. Si vous voulez vraiment le module de partout, comprennent regardez 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.

3voto

Shreyas Points 4871

A>1. Vous pouvez utiliser la même syntaxe que toute autre classe ruby. Par exemple, je suis à la définition d'un VehicleClassifer module qui va utiliser la classify_vehicle méthode pour classer un véhicule sur la base du nombre de roues, 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 répertoire /lib dossier.

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 que vous utilisez le module et vous aurez accès à l'ensemble du module méthodes.

Aussi, Dans le cas où vous avez besoin d'utiliser un module par le biais de votre application, vous pouvez l'inclure dans votre demande de contrôleur.

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