ruby-on-rails - 使用 ActiveRecord 在哪里找不到记录时如何失败?
问题描述
在#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
推荐阅读
- angular - 错误:无法建立隧道套接字,原因=套接字在运行 ng e2e Protractor 测试时挂起
- c++ - C++ - 重置字符串流不会重置获取位置或清除标志吗?
- material-ui - Mui 数据表上的 selectRow
- javascript - 除了在角度中使用接口之外,如何解决循环依赖
- sql - 如何在 Oracle SQL 中创建子帐户
- node.js - 为什么nodeJs bcrypt和dotNet版本的hash结果有差异
- amazon-web-services - AWS Lambda 到 Aurora RDS 数据传输成本和网络架构
- java - java中ListIterator中next()和previous()方法的问题
- html - 如果特定元素不适合容器,我该如何隐藏它们?
- angular - mat-select 不保留所选值