Rails中的Ruby类扩展在本地声明时有效,从`/ lib /`导入时返回`nil`。

时间:2018-11-15 01:27:35

标签: ruby-on-rails ruby class class-extensions

TLDR:哈希扩展可以正常工作,当将其本地包含在我的Mailer中时,返回所需的输出,但是即使从类方法成功执行,从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中要求它,如:

/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 个答案:

答案 0 :(得分:2)

您需要将自定义方法注入类之外的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