我有一个字符串,我只想检查它是否是"模型" ...所以在搜索后我找到了一种方法:
'any_name'.classify.constantize
但......如果它不是有效的型号名称,则会引发以下错误:
NameError(错误的常量名称AnyName):
所以我尝试做以下事情:
if Object.const_defined?('AnyName')
#...
end
# I also tried this:
Object.const_get('AnyName')
但同样,上述两个选项都会返回相同的错误:
NameError(错误的常量名称AnyName):
const_defined
是不是应该只返回true / false而不是抛出错误?
目前,我发现了这个丑陋的解决方法:
'any_name'.classify.constantize rescue nil
但是AFAIK并不是一个好习惯(也是rubocop声称这个)。
所以,我的问题是......有一种安全的方法吗?
答案 0 :(得分:6)
有方法 safe_constantize 可以帮助你,如果没有定义,它将返回nil
"ModelName".classify.safe_constantize
的链接