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(保存、更新、创建等)而失败,但是当在末尾添加感叹号时会抛出错误
我在 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(保存、更新、创建等)而失败,但是当在末尾添加感叹号时会抛出错误