Подтвердить что ты не робот

Rails найти получение ActiveRecord:: RecordNotFound

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

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

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

4b9b3361

Ответ 1

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

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

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

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

begin
  my_record = Record.find params[:id]
rescue ActiveRecord::RecordNotFound => e
  my_record = nil
end

Ответ 2

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

my_record = Record.find(params[:id) rescue nil

Ответ 3

Когда вы вызываете 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}"

Ответ 4

Record.find_by(id: params[:id])

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