Как создать и использовать модуль с помощью 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
в классе, в котором вы используете модуль, и у вас будет доступ ко всем методам модуля.
Кроме того, если вам нужно использовать модуль через свое приложение, вы можете включить его в свой контроллер приложений.