【问题标题】:How to monkey patch Array in Rails lib subfolder?如何在 Rails lib 子文件夹中修补数组?
【发布时间】:2018-12-12 03:04:41
【问题描述】:

我有一个标准 Rails 5.2 应用程序,我想向 Array 类添加一个方法。

所以我在lib/core_extensions/array/use_slugs.rb 中创建了一个文件,代码如下:

module CoreExtensions
  module Array
    def use_slugs
      binding.pry
    end
  end
end

Array.include CoreExtensions::Array

并在我的config/application.rb 文件中添加:

class Application < Rails::Application
  ...
  config.eager_load_paths << Rails.root.join('lib')
  config.eager_load_paths << Rails.root.join('lib', 'core_extensions', '**/')
  ...
end

但是当我打电话给[].use_slugs 时,我仍然得到undefined method 'use_slugs' for []:Array

为什么?

谢谢

【问题讨论】:

  • 你试过没有config.eager_load_paths &lt;&lt; Rails.root.join('lib', 'core_extensions', '**/')
  • 是的(没有帮助),但我猜你需要它
  • 可以将其保存在初始化程序中,如果您同意的话。
  • 好吧,当然(而且它正在工作),但绝对不是这样的代码应该存在的地方..

标签: ruby-on-rails monkeypatching


【解决方案1】:

好吧,给别人。我决定不加载整个 lib 文件夹到 application.rb 文件中,因为通常你不想加载所有 rake 任务等(所以我删除了 config.eager_load_paths &lt;&lt; Rails.root.join('lib')config.eager_load_paths &lt;&lt; Rails.root.join('lib', 'core_extensions', '**/')application.rb)

我将lib 文件夹中的文件夹结构保持不变,但我只加载了我创建的config/initializers/lib_init.rb 文件中的特定文件和lib 子文件夹,如下所示:

require Rails.root.join('lib', 'sp_form_builder.rb')
Dir[ Rails.root.join('lib', 'core_extensions', '**') ].each { |f| require f }

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 2011-06-26
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2012-02-16
    • 2012-04-27
    相关资源
    最近更新 更多