ruby-on-rails - 在 Rails 的模块中定义自定义异常

标签 ruby-on-rails exception module

我创建了一个自定义模块(目前只定义了一个新的异常类),并将它放在 lib/lib_th.rb 下。

module LibTH
    module Error
        IDNotFound = Class.new
    end
end

我不需要在我的代码中要求/包含该模块,因为它应该自动加载,因为它遵循传统的命名规则。

但是当我尝试提高 IDNotFound我的代码中某处的异常:
res.size == 0 ? raise LibTH::Error::IDNotFound : res

我收到以下错误:
SyntaxError (/Users/lrnz/code/ruby/corinna/app/models/treasure_hunt.rb:49: syntax error, unexpected tCONSTANT, expecting kDO or '{' or '('
  res.size == 0 ? raise LibTH::Error::IDNotFound : res
                             ^
/Users/lrnz/code/ruby/corinna/app/models/treasure_hunt.rb:49: syntax error, unexpected ':'
  res.size == 0 ? raise LibTH::Error::IDNotFound : res
                                                  ^):
app/controllers/treasure_hunts_controller.rb:50:in `show'

奇怪的是,我在尝试引发 script/console 中的异常时没有遇到任何问题。 :
>> raise LibTH::Error::IDNotFound
LibTH::Error::IDNotFound: LibTH::Error::IDNotFound
from (irb):70

谢谢!

最佳答案

没关系,我自己解决了这个问题:

而不是使用 if ? then : else声明,我将其扩展为:

raise LibTH::Error::IDNotFound if res.size == 0
res

看来你不能在类 C 的 if 中使用常量值(作为类名)声明,因此:
syntax error, unexpected tCONSTANT, expecting kDO or '{' or '('

谢谢阿西!

关于ruby-on-rails - 在 Rails 的模块中定义自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1092222/

相关文章:

ruby-on-rails - 在 Cucumber 场景中使用 click_link

java - @RestControllerAdvice 在 Spring Boot 响应式 Java 应用程序中不起作用

在 repo 中使用多个模块时,Go get 找不到本地包

javascript - Webpack umd 库返回 Object.default

javascript - 带 Turbolinks 的 Rails Bootstrap 4

ruby-on-rails - rails : Storing binary files in database

android - MediaRecorder.prepare() 异常 - 没有这样的文件或目录

sockets - Lua Socket无法通过Ctrl+C正常停止

python - Python中的模块和脚本有什么区别?

ruby-on-rails - 了解康康舞能力