ruby-on-rails - 检查常量是否定义的正确方法是什么?

标签 ruby-on-rails ruby ruby-on-rails-5

我有一个字符串,我只想检查它是否是一个“模型”...所以在搜索之后我找到了一种方法:

'any_name'.classify.constantize

但是...当它不是有效的模型名称时,它会抛出以下错误:

NameError (wrong constant name AnyName):

所以我尝试执行以下操作:

if Object.const_defined?('AnyName')
  #...
end

# I also tried this:
Object.const_get('AnyName')

但同样,上面的两个选项都返回相同的错误:

NameError (wrong constant name AnyName):

const_defined 不应该只返回 true/false 而不是抛出错误?

目前,我发现了这个丑陋的解决方法:

'any_name'.classify.constantize rescue nil

但据我所知,这不是一个好的做法(rubocop 也声称这一点)。

所以,我的问题是......有没有安全的方法来做到这一点?

最佳答案

safe_constantize 方法可以帮助你,如果没有定义它会返回 nil

"ModelName".classify.safe_constantize

这是 safe_constantize 的链接

关于ruby-on-rails - 检查常量是否定义的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45155827/

相关文章:

ruby-on-rails - 在 ROR 中将字符串和整数的组合中的整数相乘

ruby-on-rails - Rails 5 自定义初始化器不工作

ruby-on-rails - RSpec 禁用bypass_rescue

mysql - Rails 3 - MySQL 客户端库版本不正确!为错误的客户端库版本编译的 Gem

ruby-on-rails - RVM 不更改 Mac 上的 Ruby 版本

ruby-on-rails - ActiveRecord 异常不在服务对象中抛出

html - 如何使用 Nokogiri 使用 CSS 选择器逐行解析?

19-1-1 到 1900-01-01 的 Ruby Date.strftime 格式日期不起作用

ruby-on-rails - Rails通过关联导出到csv

ruby-on-rails - 更改 rails secret_key_base 对生产有什么影响?