Повторное открытие модуля, определенного в геме из каталога lib - PullRequest
3 голосов
/ 16 ноября 2011

У меня есть файл, который выглядит так

module Devise
  module Mailers
    module Helpers

      def initialize_from_record(record)
        record = hack_record(record)
        @scope_name = Devise::Mapping.find_scope!(record)
        @resource = instance_variable_set("@#{devise_mapping.name}", record)
      end

      protected

      # monkey patch :D
      def hack_record(record)
        record.kind_of?(Hash) ? kmodel(record).where(:email=>record.first[1]['email']).first : record
      end

      def kmodel(record)
        record.first[0].camelize.constantize
      end

    end
  end
end

Очевидно, он заново открывает модуль Devise. Если я положу его в инициализаторах все отлично. Однако, если я помещу его в lib / devise / mailers, он будет прочитан, однако он не сможет найти другие методы из модуля, которые определены в геме Devise. Почему это так?

1 Ответ

0 голосов
/ 16 ноября 2011

Это потому, что он загружает ваш модуль Devise перед модулем Devise.Они названы одинаково и размещены в идентичных (по крайней мере, в соответствии с путем загрузки) путях.

Если вы хотите определить новые методы для этого модуля, то как насчет определения другого модуля полностью и включения его вDevise's?

lib / devise / mailers / helpers_extensions.rb

module Devise
  module Mailers
    module HelpersExtensions
      # your code
    end
  end
end

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