Rails"尝试"一个常量

Car*_*ham 2 ruby serialization activerecord ruby-on-rails

我通过构建命名空间和名称以及使用来加载序列化程序constantize.

如果序列化器不存在则会抛出未初始化的常量错误.

在将名称转换为常量之前,有什么方法可以尝试常量或主动检查序列化程序是否存在?

Raf*_*aez 5

你可以使用Object.const_defined?:

'Serializer'.constantize if Object.const_defined?('Serializer')
Run Code Online (Sandbox Code Playgroud)

或者你也可以使用Ruby方法Object.const_get而不是Rails 方法:

Object.const_get('Serializer')
Run Code Online (Sandbox Code Playgroud)

  • 这个答案不适合自动加载.`> Object.const_defined?('ReportExporters :: Summary :: CsvExporter')=> false`但类确实存在`> ReportExporters :: Summary :: CsvExporter => ReportExporters :: Summary :: CsvExporter` (3认同)