ruby-on-rails - 在 Ruby 和/或 Rails 中在哪里定义自定义错误类型?

标签 ruby-on-rails ruby conventions

是否有在 Ruby 库 (gem) 或 Ruby on Rails 应用程序中定义自定义错误类型的最佳实践?具体来说:

  1. 他们在项目结构上属于哪个位置?一个单独的文件,内联相关的模块/类定义,在其他地方?
  2. 是否有任何约定可以确定何时 以及何时 创建新的错误类型?

不同的图书馆有不同的做事方式,我还没有注意到任何真正的模式。一些库总是使用自定义错误类型,而另一些库则根本不使用它们;有些具有扩展标准错误的所有错误,而另一些则具有嵌套的层次结构;有些只是空的类定义,有些则有各种巧妙的技巧。

哦,只是因为我觉得称这些“错误类型”有点模棱两可,我的意思是:

class AuthenticationError < StandardError; end
class InvalidUsername < AuthenticationError; end

最佳答案

对于 gem

我已经多次看到您以这种方式定义异常:

gem_dir/lib/gem_name/exceptions.rb

并定义为:

module GemName

  class AuthenticationError < StandardError; end
  class InvalidUsername < AuthenticationError; end

end

这方面的一个例子是 httparty 中的这样的东西

对于 Ruby on Rails

将它们放在您的 lib/文件夹中一个名为 exceptions.rb 的文件下,该文件看起来像这样:

module Exceptions
  class AuthenticationError < StandardError; end
  class InvalidUsername < AuthenticationError; end
end

你会像这样使用它:

raise Exceptions::InvalidUsername

关于ruby-on-rails - 在 Ruby 和/或 Rails 中在哪里定义自定义错误类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200842/

相关文章:

ruby-on-rails - 从文本字段中检索 YAML

ruby - Ruby 中的私有(private)方法应该放在哪里?

ruby-on-rails - 在 Rails 中为 SQL 查询设置超时值

ruby-on-rails - 您将如何使模型或 Resque worker 中的片段缓存过期?

javascript - Rails 应用程序中的本地人问题

ruby - 如何配置 Cucumber/Aruba 来使用 SimpleCov?

ruby-on-rails - 自定义 ActionMailer 预览标题

ruby-on-rails - 根据下拉框 3 中定义的值过滤索引页面的值

c++ - 主要论点约定

包内的 Java 接口(interface)和类组织约定