Как создать и использовать модуль с помощью Ruby on Rails 3?

Я использую Ruby on Rails 3, и я хотел бы переместить некоторый пользовательский и общий код в модуле.

  • Какой синтаксис следует использовать для написания кода модуля?
  • В какой папке моего приложения я должен поместить файл модуля?
  • Как мне включить этот модуль в один или несколько классов контроллеров?
  • Какие еще действия, если таковые имеются, мне нужно использовать настраиваемый модуль в любом месте приложения?
  • Как я могу вызвать методы в модуле из моего приложения?

Спасибо заранее.

Ответ 1

To 1. Создается/открывается модуль  просто говоря:

module MyModule
  def first_module_method
  end
end

В 2. Папка lib. Если вы хотите организовать свои модули в папке lib, вы можете поместить их в свои модули. Например, если вам нужна подпапка super_modules, ваши модули будут определены следующим образом:

module SuperModules
  module MyModule
    def first_module_method
    end
  end
end

До 3./5. При включении модуля в класс вы можете просто вызвать методы модулей, как если бы они были определены в классе:

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

К 4. Frst, убедитесь, что ваш модуль действительно необходим в каждом классе вашего приложения. Если нет смысла включать его только там, где это необходимо, чтобы не раздувать классы, которые ему не нужны. Если вы действительно хотите, чтобы модуль повсюду, включите взгляд на иерархию классов ваших классов в приложении. Вам нужен модуль во всех моделях? Вы можете открыть ActiveRecord:: Base и добавить туда свой модуль.

Ответ 2

> 1. Вы можете использовать тот же синтаксис, что и любой другой класс ruby. Например, я определяю модуль VehicleClassifer, который будет использовать метод classify_vehicle для классификации транспортного средства в зависимости от количества колес, которые он получает в качестве входных данных.

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

A > 2. Модули обычно хранятся в папке /lib.

вопросы 3,4,5 имеют более-менее одинаковый ответ. вы можете использовать

class SomeController < ApplicationController
  include VehicleClassfier

  def index 
    classify_vehicle(4)  
  end
end

в классе, в котором вы используете модуль, и у вас будет доступ ко всем методам модуля.

Кроме того, если вам нужно использовать модуль через свое приложение, вы можете включить его в свой контроллер приложений.