Rails - Не удается достичь блока восстановления внутри цикла do-while - PullRequest
0 голосов
/ 06 мая 2020

У меня есть какое-то время l oop в рельсах как

session['SPEAKERS'].map do |speaker|
      begin
        Component::AgendaSpeaker.create_with(
            name: [speaker['FIRST_NAME'], speaker['LAST_NAME']].join(' '),
            job_title: speaker['TITLE'],
            remote_file_url: speaker['PHOTO_URL'],
            description: speaker['EXPERTISE']
        ).find_or_create_by(
            component_id: component_id(:agenda_speakers),
            weg_id: speaker['SPEAKER_ID']
        )
      rescue
        p "Rescue reached"
      ensure
        p "Ensure reached"
      end
    end

Для каждого выполнения l oop я пытаюсь создать и сохранить динамик, и иногда возникает исключение в active_record (из-за недоступности файла изображения или 403 запрещенного исключения et c).

Я бы хотел поймать это в моем блоке восстановления и обработать его дальше. Однако исключение перехватывается и спасается в другом месте (внутри active_record), что вызывает исключение непосредственно в моей консоли, и, следовательно, код вообще не достигает моего блока «спасения». Однако мой код достигает блока «гарантировать».

Как мне изменить свой код, чтобы достичь моего блока «спасения»?

1 Ответ

1 голос
/ 06 мая 2020

Вы ищете find_or_create_by!

https://apidock.com/rails/ActiveRecord/Relation/find_or_create_by%21

Многие активные методы записи потерпят неудачу, просто вернув false (save, update, create et c ..), но выдаст ошибку, если в конце будет добавлен восклицательный знак

...