使用活动记录找不到记录时如何失败?



使用#find时,找不到记录时会引发异常,如何使用#where获得相同的效果?

我想通过key属性获取许多记录,如果缺少任何记录,则失败。键属性是唯一的。

keys = %w(apple pear grape)
fruits = Fruit.where(key: keys)

这可能会返回 0 到 3 条记录。

我希望这失败,除非返回 3 条记录。

是否可以在 ActiveRecord 中执行此操作,或者我是否需要检查返回集合的size

fruits = Fruit.where(key: keys).tap { |fruits| raise(...) unless fruits.size == keys.size }

where方法旨在镜像 SQL 的 where 子句,因此如果未找到匹配的记录,它不会失败。它只会返回一个空关系。

筛选记录后,如果返回的关系的大小不等于要查找的内容,则引发错误。您需要在循环访问任何返回的记录之前执行此操作

keys = %w(apple pear grape)
fruits = Fruit.where(key: keys)
raise 'my special error' unless fruits.size == keys.length
# loop here  

最新更新