ruby-on-rails - ActiveRecord#存在吗?或从 ActiveRecord::RecordNotFound 中救援

标签 ruby-on-rails exception activerecord

处理以下类型情况的建议方法是什么:

假设我有一个名为 Cart 的模型,它与模型 Person 具有 1-1 关系,并且具有相同的 PK(用户的 id)。

在我的cart_controllerindex方法中,我想检查当前用户是否存在Cart。 如果我执行 Cart.find(the_user_id) 并且购物车不存在,则会引发 RecordNotFound 异常。
我看到有两种解决这个问题的方法:

1。从异常中拯救

 begin
    @cart = Cart.find(the_user_id)
    #more code here
 rescue ActiveRecord::RecordNotFound
    #the cart is empty message
 end

2。使用 ActiveRecord#exists?方法

 if Cart.exists?(the_user_id)
    @cart = Cart.find(the_user_id)
    #more code here
 else
    #the cart is empty message
 end

根据我对异常处理的(有限)知识,我知道不建议以这种方式使用异常,但是每次都进行额外的查询值得吗?

最佳答案

使用 find_by_id 而不是查找:

@cart = Cart.find_by_id(params[:id])

如果不存在则为 nil,因此您可以根据需要在 Controller / View 中检查“if @cart”

关于ruby-on-rails - ActiveRecord#存在吗?或从 ActiveRecord::RecordNotFound 中救援,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896991/

相关文章:

ruby - Rails 在迁移之间共享代码(又名关注点)

ruby-on-rails - 在 Rails datetime_select 中将日期/时间留空

ruby-on-rails - Rails ActiveRecord::find Join语句问题

ruby-on-rails - 无法删除 rake 0.9

ruby-on-rails - 如何缩小 rails erb 文件中的 javascript 部分?

ruby-on-rails - ActionMailer 电子邮件失败 - 取消当前流程

java - 将使用记录器的错误正确转换为常规字符串

ruby-on-rails - 如何仅在扩展不存在时启用它?

Java:在finalize()中抛出异常的影响

java - IllegalSelectQueryException 和 InvalidDataAccessApiUsageException