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