Ruby on Rails 异常

标签 ruby ruby-on-rails-3

我是一名初级 Rails 开发人员,有人建议我使用 Class.find(id) 来查询数据库,而不是我之前使用的 Class.find_by_id(id) 。我被告知的原因是因为前者会引发异常,而后者会返回零。我意识到这种情况发生了,但我想知道这样做的高级概念逻辑是什么。为什么我想要异常(exception)?这是一个 Rails 标准吗?我总是更喜欢返回异常而不是 nil 的方法?

最佳答案

您通常需要异常(exception),因为您通常根据用户输入的数据(例如单击链接)执行 Foo.find(id)

例如,您向用户显示项目列表。有这样的链接:

http://example.com/items/100
http://example.com/items/101
http://example.com/items/102

The user clicks the first link, and expects to see item 100.

Your code does this:

 Item.find(100)

您希望找到该项目,因为应用程序创建了该项目链接。如果该项目不存在,您会感到惊讶。

(可能会出现意外的情况:可能该项目已被删除,或者黑客可能正在发送丢失的 id 等。使用异常可以帮助您将其作为特殊情况处理。)

为此,异常优于 nil,因为您希望代码立即失败,这样您就不会意外地将 nil 发送到其他方法。

Ruby nil 对象可能会令人困惑,因为它们的计算结果为 falsey,而且由于 Ruby 使用 C 的方式,nil.id == 4。错误消息显示为“警告:Object#id 将被弃用”或“未定义的方法” 4:固定数”。

关于Ruby on Rails 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14534110/

相关文章:

ruby-on-rails - 遍历目录并从 ruby​​ on rails 中的文件读取

ruby-on-rails - Rails 自动转义 HTML - 如何阻止它?

ruby-on-rails - Rails Controller 的常见过滤器

ruby-on-rails-3 - Heroku 上 Rails 的 Web 分析

ruby - 使用 xmpp4r Ruby gem,如何同步发现联系人是否在线?

ruby-on-rails - 我可以忽略 Hirb 中某些太长的字段吗?

ruby-on-rails - number_with_precision 带连字符的格式化数字

ruby-on-rails - 如何在 Ruby on Rails 3 中以非阻塞模式运行外部 shell 命令

ruby-on-rails - Rails 引擎 : Namespaced Polymorphic URLs

ruby-on-rails - rails : Friendly_id does not generate slugs for old records