如何检查Rails模型是否已定义?

问题描述 投票:0回答:1

我正在使用 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
    ,但是它很难看,如果可以的话我不想使用它
ruby-on-rails ruby rails-activerecord
1个回答
0
投票

实现这一目标的一种方法是使用

#missing_name
并营救被抛出的
NameError
:

begin
  HelloWorld
rescue NameError => e
  e.missing_name("HelloWorld")
end
# => "HelloWorld"

请参阅文档了解更多详细信息。


除此之外,您应该检查这是否可能是由于 Rails 的加载问题造成的。

© www.soinside.com 2019 - 2024. All rights reserved.