我的应用程序遇到了问题:我的数据库有一个限制,其中 trip_id + trip_level_id 必须是唯一的。
现在,这是在数据库级别(没有验证),如果我尝试添加一个包含数据库中已经存在的字段的项目,我会收到一个“约束异常”。
问题是:
- 约束异常仅与 SQlite3 相关,而我需要“所有数据库”的东西,特别是我将在生产中使用 mysql,而在开发中使用 sqlite3。
- 在约束异常之后,mongrel 关闭,这绝对不是我想要的。我想向用户发送一条消息“发生约束异常”并且只是不添加该项目,用户需要返回并添加一个正确的项目。
如果可能的话,我如何将所有这些异常转换为 activerecords 应该为我获取的错误(这应该是最好的解决方案)?
否则,如何声明一个验证方法来确保这 2 列的值应该是唯一的?
编辑 1:我刚刚注意到我无法在 save 方法上拯救 SQLite3::ConstraintException,至少如果我只使用 Exception 类的话。我想我必须声明一个验证,但如果数据库中已经存在,感觉有点多余。
编辑2:这些似乎在谈论这个问题:https ://rails.lighthouseapp.com/projects/8994/tickets/2419-raise-specific-exceptions-for-violated-database-constraints但是看起来他们没有应用它,但帖子真的很旧(3年)