Расширение класса Ruby в Rails работает при локальном объявлении и возвращает `nil` при импорте из`/lib/`
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
а затем потребуйте это в почтовике, как в:
/lib/core_ext/hash/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 ответ
Вы должны ввести свой собственный метод в 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