2014-01-08 4 views
0

В Rails документа, я считаю, что:Rails ActiveRecord [найти] метод

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

ответ

1

Ошибка указывает на то, что есть нет записей в Person с id s 1, 2 и 6.

Синтаксис Person.find([1,2,6]) и Person.find(1, 2, 6) эквивалентен и правилен для получения нескольких записей по идентификатору. Обратитесь к документации по API into.

Возможно, вы проверите, что находится в таблице. Начать irb -оболочку вашего проекта и распечатать все записи Person написав: Person.all

Я не могу найти find_all_by в новейшей документации API и аргументация неправильно, что find вызывает RecordNotFound исключения. Он поднимает RecordNotFound, если ни один из идентификаторов не найден. В документации указано: find:

Если запись не найдена для всех перечисленных идентификаторов, то RecordNotFound будет поднят.

См. Также here.

1

Я считаю, что правильный синтаксис для вытягивания нескольких идентификаторов сразу равен Person.find([1,2,6]). Если это все равно возвращает ActiveRecord::RecordNotFound, тогда записи с этими идентификаторами не существуют.

Чтобы избежать ошибки, если идентификатор не существует, вы можете сделать Person.find_all_by_id([1,2,6]). В этом случае, если он не находит записи, он должен возвращать пустой массив.

Надеюсь, это поможет.

+0

спасибо, точно такая же ошибка. – HXH

+0

Вы уверены, что записи существуют с этими номерами идентификаторов? – MitulP91

1

find рассчитывает найти все записи, если кто-то отсутствует, вы получите RecordNotFound

Если вы хотите работать без erroring, когда Идентификаторы отсутствуют использование

Person.where("id in (1,2,6)") 
Смежные вопросы