Rails находит получение ActiveRecord :: RecordNotFound - PullRequest
32 голосов
/ 15 марта 2012

У меня есть таблица, которая включает в себя «принадлежит» в модели.Таблица содержит поле xx_id для связи двух таблиц.

Но иногда xx_id будет пустым.Когда это так, я получаю ActiveRecord :: RecordNotFound.Я не хочу ошибки - я просто хочу пустое отображение для этого поля.

Что вы предлагаете?

Ответы [ 4 ]

73 голосов
/ 15 марта 2012

Rails всегда вызывает исключение ActiveRecord :: RecordNotFound при использовании метода find.Методы find_by_*, однако, возвращают nil, когда запись не найдена.

Документация ActiveRecord сообщает нам:

RecordNotFound - запись не была полученак методу поиска.Либо строка с указанным идентификатором не существует, либо строка не соответствует дополнительным ограничениям.Некоторые вызовы find не вызывают это исключение, сигнализируя о том, что ничего не найдено, для получения более подробной информации обратитесь к его документации.

Если вы хотите вернуть nil, когда записи не могут быть найдены, просто обработайтеИсключение составляют следующие:

begin
  my_record = Record.find params[:id]
rescue ActiveRecord::RecordNotFound => e
  my_record = nil
end
7 голосов
/ 08 января 2014

Не могли бы вы написать

my_record = Record.find(params[:id) rescue nil
2 голосов
/ 22 июня 2017
Record.find_by(id: params[:id])

возвращает Record объект, если он найден, или ноль, если его нет.

1 голос
/ 12 ноября 2013

Когда вы вызываете find, вы получите массив. Если массив не содержит объектов, число равно нулю.

items = Store.find(:all, :conditions => {:resource_id => item.id})
if item.count == 0 puts " !not found for item id#{item.id}"

или

if item.nil? puts " !not found for item id#{item.id}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...