我有一个使用Sequel ORM的Ruby / Padrino项目来访问MySQL中的遗留数据库。我遇到的问题是,有几个表具有用户可编辑列,也是主键。
我正在尝试设置Sequel来捕获应用程序本身中的任何重复错误,然后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'
我是否错误配置了我的验证,还是我需要调用另一个插件?
答案 0 :(得分:1)
insert
是数据集级方法,验证是模型级别。您可能希望使用create
代替insert
。