Ruby on rails 如果未找到所有记录,如何引发ActiveRecord::RecordNotFound?
假设数据库中存在id为1的项,但id为2的项不存在,则以下行: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,或者如果其中
Item.find([1, 2])
将引发ActiveRecord::RecordNotFound
错误。但是,以下行不会:
Item.where(id: [1, 2])
相反,它将只返回id为1的项。如果我正在查询唯一值,是否有方法强制执行find
onwhere
的行为
我有一个modelFoo
,除了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 pohekarfind
只对id起作用,我正在查询一个属性,该属性与id一样唯一,但不是主键。因此,我只能使用where
。我想你可以只提升ActiveRecord::RecordNotFind foo.size
@ankur pohekarfind
只与id一起工作,我正在查询一个属性,该属性与id一样是唯一的,但不是主键。因此,我只能使用where
。谢谢,@alok swain,我也试图在源代码中找到位置,但无法跟踪执行链。这真的帮助了我。谢谢你,@alok swain,我也试图在源代码中找到位置,但无法跟踪执行链。这真的帮助了我。