Расширение класса Ruby в Rails работает при локальном объявлении и возвращает `nil` при импорте из` / lib / ` - PullRequest
0 голосов
/ 15 ноября 2018

TLDR: расширение хеша работает безупречно, возвращая нужный вывод, когда он включен локально в мой почтовик, но всегда возвращает nil при импорте из модуля в lib/, даже если метод класса успешно загружен.

Когда я объявляю расширение в моем файле mailer.rb, перед определением моего класса, например:

class Hash
  def try_deep(*fields)
    ...
  end
end

class MyMailer < ApplicationMailer
  some_hash.try_deep(:some_key)
end

это работает безупречно, но это плохая практика. Я подумал, что лучше объявить расширение в /lib/core_ext/hash/try_deep.rb, а затем потребовать его в Mailer, как в:

/ Библиотека / core_ext / хэш / try_deep.rb:

module CoreExtensions
  module Hash
    module TryDeep
      def try_deep(*fields)
        ...
      end
    end
  end
end

/ my_mailer.rb:

require 'core_ext/hash/try_deep'

class MyMailer < ApplicationMailer
  Hash.include CoreExtensions::Hash::TryDeep
  some_hash.try_deep(:some_key)
end

1 Ответ

0 голосов
/ 15 ноября 2018

Вам нужно внедрить свой пользовательский метод в Hash вне вашего класса:

my_mailer.rb

require 'core_ext/hash/try_deep'

class Hash
  include CoreExtensions::Hash::TryDeep
end

class MyMailer < ApplicationMailer
  some_hash.try_deep(:some_key)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...