【发布时间】:2012-08-23 06:37:58
【问题描述】:
我的应用程序遇到了问题:我的数据库有一个限制,其中 trip_id + trip_level_id 必须是唯一的。
现在,这是在数据库级别(无验证),如果我尝试使用 db 中已经存在的那些字段添加一个项目,我会收到一个“约束异常”。
问题是:
- constraintexception 仅与 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 年)
【问题讨论】:
标签: mysql ruby-on-rails activerecord ruby-on-rails-3.1 sqlite