Ruby on rails 如果未找到所有记录,如何引发ActiveRecord::RecordNotFound?

Ruby on rails 如果未找到所有记录,如何引发ActiveRecord::RecordNotFound?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,假设数据库中存在id为1的项,但id为2的项不存在,则以下行: Item.find([1, 2]) 将引发ActiveRecord::RecordNotFound错误。但是,以下行不会: Item.where(id: [1, 2]) 相反,它将只返回id为1的项。如果我正在查询唯一值,是否有方法强制执行findonwhere的行为 我有一个modelFoo,除了id,还有一个uidstring属性。每个foo都有一个唯一的uid值。因此,给定一组uid,我希望能够获取所有foo,或者如果其中

假设数据库中存在id为1的项,但id为2的项不存在,则以下行:

Item.find([1, 2])
将引发
ActiveRecord::RecordNotFound
错误。但是,以下行不会:

Item.where(id: [1, 2])
相反,它将只返回id为1的项。如果我正在查询唯一值,是否有方法强制执行
find
on
where
的行为

我有一个model
Foo
,除了
id
,还有一个
uid
string属性。每个
foo
都有一个唯一的
uid
值。因此,给定一组
uid
,我希望能够获取所有
foo
,或者如果其中一个
uid
值的
foo
不存在,则引发一个错误


另外,我可以做一些类似于提高ActiveRecord::RecordNotFound的事情,除非查询结果.count==uids.count,但我想知道,是否有更好的方法。

如果您想提高
ActiveRecord::RecordNotFound
错误,请点击这里。 您必须使用
ActiveRecord#find
方法,因为
ActiveRecord#where
不会引发此错误

我认为你应该使用
ActiveRecord#find
,但你可以试试

ids = [1,2,3,4,5]
foo = Foo.where(id: ids)
a = foo.pluck(:id)
raise ActiveRecord::RecordNotFound if ids!=a 

如果要引发
ActiveRecord::RecordNotFound
错误,请单击此处。 您必须使用
ActiveRecord#find
方法,因为
ActiveRecord#where
不会引发此错误

我认为你应该使用
ActiveRecord#find
,但你可以试试

ids = [1,2,3,4,5]
foo = Foo.where(id: ids)
a = foo.pluck(:id)
raise ActiveRecord::RecordNotFound if ids!=a 

我认为对于
where
(它只返回一个关系而不是实际的AR对象)没有这样的规定

我检查了源代码,它看起来像是
ActiveRecord
使用相同的技巧,当它无法从传递的数组中找到某个id时,使用find引发
RecordNotFound
异常。(将结果的大小与传递的ids数组的大小相匹配)
参考了方法
find
调用以及它们引发异常的位置,我认为
where
(它只返回一个关系而不是实际的AR对象)没有任何这样的规定

我检查了源代码,它看起来像是
ActiveRecord
使用相同的技巧,当它无法从传递的数组中找到某个id时,使用find引发
RecordNotFound
异常。(将结果的大小与传递的ids数组的大小相匹配)
参考了方法
find
调用以及它们引发异常的位置

我认为您可以只
raise ActiveRecord::RecordNotFound foo.size
@ankur pohekar
find
只对id起作用,我正在查询一个属性,该属性与id一样唯一,但不是主键。因此,我只能使用
where
。我想你可以只
提升ActiveRecord::RecordNotFind foo.size
@ankur pohekar
find
只与id一起工作,我正在查询一个属性,该属性与id一样是唯一的,但不是主键。因此,我只能使用
where
。谢谢,@alok swain,我也试图在源代码中找到位置,但无法跟踪执行链。这真的帮助了我。谢谢你,@alok swain,我也试图在源代码中找到位置,但无法跟踪执行链。这真的帮助了我。