Rails - 在 do-while 循环中没有到达救援块

Rails - Not reaching rescue block inside a do-while loop

我在 rails 中有一个 while do 循环

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

对于循环的每次执行,我尝试创建并保存一个扬声器,但有时 active_record 会引发异常(由于图像文件不可用或 403 禁止异常等)。

我想在我的救援块中捕获它并进一步处理它。但是,异常在其他地方(在 active_record 内)被捕获并挽救,这直接在我的控制台中抛出异常,因此代码根本不会到达我的 'rescue' 块。但是,我的代码到达 'ensure' 块。

如何更改我的代码以到达我的 'rescue' 区块?

您正在寻找 find_or_create_by!

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

许多活动记录方法会简单地通过返回 false(保存、更新、创建等)而失败,但是当在末尾添加感叹号时会抛出错误