我对在Rails应用程序中处理数据库异常有疑问。
在我的应用程序(电子商务)中,当我想购买产品时,我点击"添加产品"在我的控制器中,我找到带有该ID的产品(我通过params传递)并将产品保存到line_items
表中。
当我做@product = Product.find(params[:id])
时,我应该处理一个可能的例外吗?是否有可能找不到记录或其他内容?
默认情况下,rails不会添加任何类型的错误处理。
当我在表格中插入内容时,rails验证应该处理我的错误。没有?或者更好,.save
应该保护我。
那么,我应该在这些db操作中插入某种保护吗?如果是,我该怎么办?
答案 0 :(得分:0)
Rails和Ruby为您提供了提升,处理和管理异常的必要工具。但是,由您来正确地将它们粘合在一起以构建可靠的应用程序。
Rails和Ruby无法为程序员完成所有工作。在每种情况下,他们无法理解您想要做什么。您需要编写代码以指示应用程序如何表现。
例如,如果ID与数据库中的任何记录都不匹配,则Product.find
会引发ActiveRecord::RecordNotFound
异常。但默认情况下,此错误不会被挽救。您可以使用Ruby和Rails为您提供的宏和功能来解救它。
一般来说,您可能需要营救它并显示404错误页面。但是,如果您将find
范围限定为仅获取与用户关联的产品
Product.where(user_id: current_user.id).find(params[:id])
然后RecordNotFound
可能会有不同的含义。在这种情况下,记录可能存在但在另一个用户配置文件中,因此您可能希望呈现401错误页面。
正如您所看到的,Ruby和Rails无法为程序员做出这些决定,因为正确的错误管理是您为构建应用程序而必须做出的决定的一部分。