Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Вы можете поместить их в каталог /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

Ответ 2

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

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

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

Ответ 3

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

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