我是一名初级 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/