我正在使用 Ruby on Rails 5.2.8 和 Ruby 2.7.8 版本,我发现代码中存在错误。代码应在运行时检查是否定义了模型。起初我尝试使用
defined?
方法,但由于开发环境延迟加载模块,我遇到了意外的(对我来说)行为:
defined?(ModelToCheck) #=> nil
ModelToCheck
defined?(ModelToCheck) #=> true
因此只有在使用模型之后它才看起来被定义。检查它是否已定义的最佳方法是什么?
附注
配置延迟加载的选项是:
# config/environments/development.rb
ExampleApp::Application.configure do
config.eager_load = false
# rest of the config
# ...
end
现在我也尝试使用
Object.const_defined?
方法,但又是同样的故事。
我有两个想法:
begin
rescue
块来处理 NameError
,但是它很难看,如果可以的话我不想使用它实现这一目标的一种方法是使用
#missing_name
并营救被抛出的 NameError
:
begin
HelloWorld
rescue NameError => e
e.missing_name("HelloWorld")
end
# => "HelloWorld"
请参阅文档了解更多详细信息。
除此之外,您应该检查这是否可能是由于 Rails 的加载问题造成的。