我使用的是Ruby on Rails 5.2.8和Ruby 2.7.8版本,发现代码中有一个错误.代码应该在运行时判断模型是否已定义.起初我try 使用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
目前我也try 使用Object.const_defined?
方法,但又是同样的故事.
我有两个 idea :
- 运行时不要判断模型是否已定义
- 当
NameError
没有定义时,使用abegin
rescue
块来处理NameError
,但它很难看,如果可以的话我不想使用它