ruby-on-rails - 如何挽救 `constantize`方法引发的错误异常?

标签 ruby-on-rails ruby ruby-on-rails-3 exception rescue

我正在使用 Ruby on Rails 3.2.2,我想通过引发“自定义”错误消息来正确挽救以下流程:

def rescue_method
  # sample_string.class
  # => String
  # sample_string.inspect
  # => "ARubyConstantThatDoesNotExist"

  begin
    build_constant(sample_string)
  rescue
    raise("My custom error message: #{build_constant(sample_string)} doesn't exist.")
  end
end

def build_constant(sample_string)
  "AModule::#{sample_string}".constantize
end

注意:我觉得“被迫”使用 constantize方法也在引发的“自定义”消息中以DRY代码...

当执行 rescue_method 时,似乎 raise("My custom error message") 代码从未执行,我收到以下错误:

uninitialized constant AModule::ARubyConstantThatDoesNotExist

如何正确显示引发的“自定义”消息(因为在后续引发的“自定义”消息中引发了进一步的错误异常)?你有什么建议?

最佳答案

问题是您的 build_constant 方法做了两件事:

  1. 构建类名。
  2. 使用 constantize 将名称转换为类。

当出现异常时,其中一个想要使用另一个。一个简单的解决方案是将这些单独的任务分开:

def build_class_name(sample_string)
  "AModule::#{sample_string}"
end

def rescue_method
  name = build_class_name(...)
  name.constantize
rescue NameError
  raise("My custom error message: #{name} doesn't exist.")
end

您还应该更具体地说明您正在寻找的异常,所以我免费添加了它。

关于ruby-on-rails - 如何挽救 `constantize`方法引发的错误异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12487404/

相关文章:

ruby-on-rails - 如何导航到 Sublime Text 中 Ruby on Rails 方法的方法声明?

ruby-on-rails - 如何在 Rails 中添加返回 "variables"的方法?

ruby-on-rails-3 - 弃用警告 : . ..请改用 form_for(@resource, :as => :name)

Ajax PUT 请求导致在 Rails 应用程序中注销。为什么?

ruby-on-rails - 找不到Rails 4强参数param的载波错误

ruby-on-rails - 使用前端服务器和不同机器上的音频文件在 LAN 上运行 Ruby on rails 应用程序的流式音频?

编译Ruby报错: Failed to configure openssl. 不会安装

ruby-on-rails - 在 Rails 中获取最近 X 个月的名称

javascript - Ajax删除不会刷新页面

ruby-on-rails - 如何调用类外的方法