Rails ActiveRecord [find]方法

时间:2014-01-08 07:46:24

标签: ruby-on-rails activerecord

在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

3 个答案:

答案 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 26Person.find([1,2,6])Person.find(1, 2, 6)中没有记录。

语法irbPerson相同且正确,可通过id检索多个记录。请查看into API文档。

也许你查看表中的内容。启动项目的Person.all - shell,并通过以下方式打印find_all_by的所有记录:find

我在最新的API文档中找不到RecordNotFound,并且RecordNotFound引发{{1}}异常的论证是错误的。如果没有找到任何id,它会引发{{1}}。文档说到find

  

如果找不到所有列出的ID的记录,则会引发RecordNotFound。

另见here