Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 正在抢救所有异常,而不是关闭_Mysql_Ruby On Rails_Activerecord_Ruby On Rails 3.1_Sqlite - Fatal编程技术网

Mysql 正在抢救所有异常,而不是关闭

Mysql 正在抢救所有异常,而不是关闭,mysql,ruby-on-rails,activerecord,ruby-on-rails-3.1,sqlite,Mysql,Ruby On Rails,Activerecord,Ruby On Rails 3.1,Sqlite,我的应用程序遇到了一个问题:我的数据库有一个限制,trip\u id+trip\u level\u id必须是唯一的 现在,这是在数据库级别(无验证),如果我尝试添加一个数据库中已经存在这些字段的项,我将收到一个“constraintexception” 问题是: constraintexception仅与SQlite3相关,而我对“所有数据库”都有一些要求,特别是我将在生产中使用mysql,而SQlite3则在开发中使用 在约束异常之后,mongrel关闭,这绝对不是我想要的。我想向用户发送一

我的应用程序遇到了一个问题:我的数据库有一个限制,trip\u id+trip\u level\u id必须是唯一的

现在,这是在数据库级别(无验证),如果我尝试添加一个数据库中已经存在这些字段的项,我将收到一个“constraintexception”

问题是:

  • constraintexception仅与SQlite3相关,而我对“所有数据库”都有一些要求,特别是我将在生产中使用mysql,而SQlite3则在开发中使用
  • 在约束异常之后,mongrel关闭,这绝对不是我想要的。我想向用户发送一条消息“constraint exception Occessed”(约束异常发生),只是不添加该项,用户需要返回并添加正确的项
  • 如果可能的话,我如何将所有这些异常转换为activerecords应该为我获取的错误(这应该是最好的解决方案)

    否则,如何声明一个验证方法来确保这两列的值应该是唯一的

    编辑1:我刚刚注意到我无法在save方法上解救SQLite3::ConstraintException,至少如果我只使用Exception类的话。我想我必须声明一个验证,但若它已经存在于数据库中,那个么感觉有点多余


    编辑2:这些似乎在谈论问题:尽管看起来他们没有应用它,但这篇文章确实很老了(3年)

    仔细阅读,我发现数据库约束在activerecord中没有很好地实现,使用validates\u university\u和作用域将解决我的问题

    我当然不喜欢优化的解决方案,但是我在我的create和update方法中找不到有效地拯救异常的方法,所以实际上我是用这种方法解决的