【发布时间】:2020-08-03 07:21:03
【问题描述】:
我正在尝试通过这样的 id 数组查找模型:
Model.find [1,2,3]
但是假设这些模型中只有两个存在(id 为 2 的模型已被删除):
#<Model id: 1>
#<Model id: 3>
我收到这样的错误:
#<ActiveRecord::RecordNotFound: Couldn't find all Models with 'id': (1, 2, 3) (found 2 results, but was looking for 3).>
是否可以捕获此错误并确定哪些模型不存在?
说我在我的控制器中:
def index
@models = Model.find params.require(:model_ids)
rescue ActiveRecord::RecordNotFound => e
e.full_message
???
end
我想在 ??? 行中运行一些异常 e 的代码,这将返回 2,让我知道哪些模型没有找到,所以我可以重新运行在没有它的情况下进行查询,同时注意哪些没有找到。
【问题讨论】:
-
如果具有给定 id 的记录不存在,是否必须进行救援?难道你不能使用
where,然后通过将生成的 id 与给定的 id 进行比较来检查差异吗? -
对控制流使用异常通常不是一个好主意
-
@SebastianPalma 如果这是不可能的,那是我的计划。我只是好奇是不是因为它似乎在跟踪的错误中的某个地方,我只是无法弄清楚在哪里。
-
我认为这会非常方便,但是对于 ActiveRecord 来说有点太多了,并且不建议考虑控制流的异常并且/或者成本高昂,至少在 Ruby 中是这样。
-
我鼓励您为您的问题添加答案,因为它涉及对问题的常见疑问。我不明白为什么要关闭它。
标签: ruby-on-rails postgresql activerecord ruby-on-rails-5