拯救异常并继续处理的正确方法是什么?我有一个包含文件夹和项目的应用程序,通过一个名为folders_items 的连接表具有habtm 关系。该表具有唯一约束,确保没有重复的项目/文件夹组合。如果用户多次尝试将一个项目添加到同一个文件夹,我显然不希望添加额外的行;但我也不想停止处理。
Postgres 在违反唯一约束时会自动抛出异常,所以我尝试在控制器中忽略它,如下所示:
rescue PG::Error, :with => :do_nothing
def do_nothing
end
这适用于单次插入。控制器使用状态码 200 执行渲染。但是,我有另一种方法可以在循环中进行批量插入。在该方法中,控制器在遇到第一个重复行时退出循环,这不是我想要的。起初,我认为循环必须被包裹在一个正在回滚的事务中,但事实并非如此——重复之前的所有行都被插入。我希望它简单地忽略约束异常并移至下一项。如何防止 PG::Error 异常中断这个?