4

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

'any_name'.classify.constantize

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

NameError(错误的常量名称 AnyName):

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

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

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

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

NameError(错误的常量名称 AnyName):

不应该只返回真/假而const_defined不是抛出错误?

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

'any_name'.classify.constantize rescue nil

但是 AFAIK 它不被认为是一个好的做法(rubocop 也在声称这一点)。

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

4

1 回答 1

8

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

"ModelName".classify.safe_constantize

这是safe_constantize的链接

于 2017-07-18T01:46:16.693 回答