Когда стоит подумать о создании собственного модуля Ruby в приложении Rails? - PullRequest
20 голосов
/ 31 мая 2009

С модулем Ruby вы можете объединить несколько методов, которые вы можете использовать в одном месте, а затем включить их в класс, как если бы вы написали их в этом классе.

Какие практические применения существуют для модулей Ruby в приложении rails?

Я был бы признателен, если бы кто-нибудь мог привести пример того, где он на самом деле использовал свой собственный модуль, так что у меня есть представление о том, какие ситуации я должен думать о их создании. Спасибо.

Ответы [ 3 ]

18 голосов
/ 31 мая 2009

1) Каждый раз, когда я собираюсь дублировать (или существенно дублировать) фрагмент кода: «О, я мог бы просто вырезать / вставить в этот другой контроллер ...»

2) Каждый раз, когда я пишу код, который, очевидно, будет использоваться в будущем.

3) Код существенного размера, который имеет определенное назначение, где это назначение довольно сильно отличается от основного назначения контроллера / модели. Это в некоторой степени связано с (2), но иногда код не будет повторно использоваться, но модуль помогает организации.

12 голосов
/ 31 мая 2009

Вы можете поместить их в каталог / lib, и они будут загружены с вашим проектом Rails.

Например, вы можете просмотреть мой репозиторий старого проекта: каталог lib проекта Rails

Так, например, у меня есть следующий модуль:

google_charts.rb

Module GCharts
  class GoogleCharts
    def some_method

    end
  end
end

И в любом месте моего приложения на Rails я могу получить доступ к методам.

Так что, если бы я получил доступ к нему с контроллера, я бы просто сделал:

require 'google_charts'

GCharts::GoogleCharts.some_method
7 голосов
/ 31 мая 2009

Мы используем модули для функциональности, которая не привязана к моделям ActiveRecord и не была абстрагирована в плагин или гем.

Недавним примером из нашей базы производственного кода является библиотека для интеграции с Campaign Monitor для управления списками рассылки. Ядро системы использует нашу пользовательскую модель, но фактическое взаимодействие со службой extenrl абстрагируется через модуль, который находится в /lib.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...