【发布时间】:2023-03-11 16:15:01
【问题描述】:
我想知道如何在 RoR 上正确地修补核心 DSL。我有以下猴子补丁:
# frozen_string_literal: true
module CoreExtensions
module Numeric
def percent_of(number)
to_f / number * 100.0
end
end
end
(我已经关注了这个article)。
现在我想知道将以下内容放在哪里:
Numeric.include CoreExtensions::Numeric
我希望这个percent_of 方法可用于我的所有应用程序。我试着把它放在config/application.rb:
# frozen_string_literal: true
Rails.application.configure do
# ...
end
Numeric.include CoreExtensions::Numeric
但它没有用。当我尝试提供以下错误时:
uninitialized constant CoreExtensions (NameError)
谢谢。
【问题讨论】:
-
核心扩展文件的路径是什么?
-
你可以把你的monkeypatch放在'config/initializers'目录下的一个文件中。在初始化阶段需要它。
-
既然你没有使用细化,那么仅仅重新打开和改变类会有什么问题?为什么你需要声明一个自定义模块并包含它?
-
要扩展@AlekseiMatiushkin 的建议,您可以使用与创建新模块相同的语法在Ruby 中“重新打开”模块:module Numeric; def percent_of(number); to_f / 数量 * 100.0;结尾;结束
-
@KeithBennett
Numeric是一个类,而不是一个模块。
标签: ruby-on-rails ruby