【问题标题】:Rails - Not reaching rescue block inside a do-while loopRails - 在do-while循环内没有到达救援块
【发布时间】:2020-08-21 11:11:23
【问题描述】:

我有一个 while do loop in rails as

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 中)被捕获并救援,这会直接在我的控制台中引发异常,因此代码根本不会到达我的“救援”块。但是,我的代码到达了“确保”块。

如何更改我的代码以到达我的“救援”块?

【问题讨论】:

标签: ruby-on-rails exception activerecord do-while rescue


【解决方案1】:

您正在寻找find_or_create_by!

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多