我的应用程序遇到了问题:我的数据库有一个约束,其中trip_id + trip_level_id必须是唯一的。
现在,这是在数据库级别(没有验证),如果我尝试添加一个包含db中已存在的字段的项目,我会收到“constraintexception”。
问题是:
如果可能的话,我怎样才能将所有这些异常转换为activerecords应该为我提取的错误(这应该是最好的解决方案)?
否则,如何声明一个验证方法,确保对于这两列,value应该是唯一的?
编辑1:我刚注意到我无法在save方法上解救SQLite3 :: ConstraintException,至少在我只使用Exception类时是这样。我想我必须声明一个验证,但如果数据库中已存在则感觉有点多余。
编辑2:这些似乎是在谈论这个问题:https://rails.lighthouseapp.com/projects/8994/tickets/2419-raise-specific-exceptions-for-violated-database-constraints然而看起来他们没有应用它,但帖子真的很旧(3年)
答案 0 :(得分:0)
阅读时,我发现数据库约束在activerecord中实现得不是很好,使用带有范围的validates_uniqueness_of将解决我的问题。
我绝对不喜欢优化解决方案,但我找不到在我的创建和更新方法中有效挽救异常的方法,所以实际上我用这种方式解决了。