1
我有一个Ruby/Padrino项目使用Sequel ORM访问MySQL中的遗留数据库。我遇到的问题是几个表有一个用户可编辑的列也是一个主键。在Sequel ORM中捕获约束错误之前服务器
我试图设置续集来捕捉应用程序本身内的任何重复错误,然后MySQL可以抛出错误。我认为Sequel中的验证助手可以帮助我做到这一点,但似乎在保存数据之前他们没有进入。
我的SQL表定义为:
CREATE TABLE `dblocations` (
`code` varchar(3) NOT NULL,
`description` varchar(100) NOT NULL,
PRIMARY KEY (`code`)
)
和我的续集模型定义如下:
class Location < Sequel::Model(:dblocations)
plugins :validation_helpers
def validate
super
validates_presence [:code, :description]
validates_unique :code
end
end
问题是现在,当我尝试下面的代码插入位置代码“ ABC'到数据库中(当代码'ABC'中已经有另一行时),Ruby会抛出以下错误:
Location.insert(:code => "ABC", :description => "Test Location")
ERROR - Mysql2::Error: Duplicate entry 'ABC' for key 'PRIMARY': INSERT INTO `dblocations` (`code`, `description`) VALUES ('ABC', 'Test Location')
Sequel::UniqueConstraintViolation: Mysql2::Error: Duplicate entry 'ABC' for key 'PRIMARY'
我错误地配置了我的验证,还是有另一个我需要调用的插件?
谢谢 - 我没有认识到数据集和模型之间的不同层次。 'Location.create(...)'很好。专业提示:我必须首先执行'Location.unrestrict_primary_key',因为':code'是我手动更改的PK。 – CyberFerret