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



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




  1. какой синтаксис я должен использовать для написания кода модуля?

  2. в какую папку моего приложения я должен поместить файл модуля?

  3. как я должен включить этот модуль в один или несколько классов контроллеров?

  4. какие еще действия, если таковые имеются, я должен использовать пользовательский модуль в любом месте моего приложения?

  5. как я могу вызвать методы в модуле из моего приложения?


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

690   2  

2 ответов:

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

module MyModule
  def first_module_method
  end
end

в 2. Элемент . Если вы хотите организовать свои модули в , вы можете поместить их в сами модули. Например, если вам нужна подпапка 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

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

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

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

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

Comments

    Ничего не найдено.