在Rails文档中,我发现:
Person.find(1, 2, 6) # returns an array for objects with IDs in (1, 2, 6)
但是当我执行这个命令时,我得到了
ActiveRecord::RecordNotFound: Couldn't find all Persons with IDs (1, 2, 6)
(found 1 results, but was looking for 2)
我是怎么得到这个错误的?我的Rails版本为3.2.14
答案 0 :(得分:1)
我认为一次提取多个ID的正确语法是Person.find([1,2,6])
。如果仍然返回ActiveRecord::RecordNotFound
,那么包含这些ID的记录就不存在了。
为了解决错误,如果id不存在,您可以执行Person.find_all_by_id([1,2,6])
。在这种情况下,如果它没有找到记录,它应该返回一个空数组。
希望这有帮助。
答案 1 :(得分:1)
find
期望查找所有记录,如果遗失,您将获得RecordNotFound
如果您希望在缺少ID时使用
而无错误地工作Person.where("id in (1,2,6)")
答案 2 :(得分:1)
错误指出Person
id
1
2
,6
和Person.find([1,2,6])
在Person.find(1, 2, 6)
中没有记录。
语法irb
和Person
相同且正确,可通过id检索多个记录。请查看into API文档。
也许你查看表中的内容。启动项目的Person.all
- shell,并通过以下方式打印find_all_by
的所有记录:find
我在最新的API文档中找不到RecordNotFound
,并且RecordNotFound
引发{{1}}异常的论证是错误的。如果没有找到任何id,它会引发{{1}}。文档说到find
:
如果找不到所有列出的ID的记录,则会引发RecordNotFound。
另见here。