Я использую Ruby on Rails 3 и хочу переместить в модуль некоторый собственный и общий код.
- Какой синтаксис использовать для написания кода модуля?
- В какой папке моего приложения я должен разместить файл модуля?
- Как мне включить этот модуль в один или несколько классов контроллеров?
- Какие еще действия, если они есть, я должен использовать в любом месте моего приложения?
- Как я могу вызывать методы в модуле из моего приложения?
Заранее спасибо.
ruby-on-rails-3
module
user502052
источник
источник
Ответы:
Кому 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. Во-первых, убедитесь, что ваш модуль действительно нужен в каждом классе вашего приложения. Если это не так, имеет смысл включать его только там, где это необходимо, чтобы в любом случае не раздувать классы, которым он не нужен. Если вам действительно нужен модуль везде, включите в него иерархию классов ваших классов в приложении. Вы хотите, чтобы модуль был во всех моделях? Вы можете открыть ActiveRecord :: Base и добавить туда свой модуль.
источник
lib
папку, важно разрешить Rails3 раскомментировать строкуconfig\application.rb
дляconfig.autoload_paths
- прочтите, например, stackoverflow.com/questions/1073076/rails-lib-modules-and ... Примечание также вы должны быть осторожны, чтобы использовать имя файла для вашего модуля, которое соответствует самому имени модуля. Так что если вы сохраните его вlib/test/my_module.rb
, вы должныinclude Test::MyModule
- для получения более подробной информации см stackoverflow.com/questions/4073856/rails-3-autoloadapp/models
если ему нужен доступ к другим моделям. Если ваш код действительно является «библиотекой» и может существовать сам по себе, я предлагаем продать драгоценный камень. Примеры см. на странице github.com/shageman/the_next_big_thingА> 1. Вы можете использовать тот же синтаксис, что и любой другой класс ruby. Например, я определяю модуль VehicleClassifer, который будет использовать метод classify_vehicle для классификации транспортного средства на основе количества колес, которые он получает в качестве входных данных.
module VehicleClassifer def classify_vehicle(number_of_wheels) VehicleType.where("number_of_wheels = ?", number_of_wheels) end end
А> 2. Модули обычно хранятся в папке / lib.
вопросы 3,4,5 имеют более или менее одинаковые ответы. ты можешь использовать
class SomeController < ApplicationController include VehicleClassfier def index classify_vehicle(4) end end
в классе, в котором вы используете модуль, и у вас будет доступ ко всем методам модуля.
Кроме того, если вам нужно использовать модуль в своем приложении, вы можете включить его в свой контроллер приложения.
источник
ApplicationHelper
?