在服务器之前捕获 Sequel ORM 中的约束错误
Trapping constraint errors in Sequel ORM before the server
我有一个 Ruby/Padrino 项目使用 Sequel ORM 来访问 MySQL 中的遗留数据库。我遇到的问题是 table 中的几个有一个用户 editable 列,它也是一个主键。
我正在尝试设置 Sequel 以在 MySQL 引发错误之前捕获应用程序本身内的任何重复错误。我假设 Sequel 中的验证助手可以帮助我做到这一点,但看起来它们在数据保存之前不会启动。
我的SQLtable定义为:
CREATE TABLE `dblocations` (
`code` varchar(3) NOT NULL,
`description` varchar(100) NOT NULL,
PRIMARY KEY (`code`)
)
和我的Sequel模型定义如下:
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'
我是否错误配置了我的验证或者我需要调用另一个插件?
insert
是数据集级别的方法,验证是模型级别的。您可能想使用 create
而不是 insert
.
我有一个 Ruby/Padrino 项目使用 Sequel ORM 来访问 MySQL 中的遗留数据库。我遇到的问题是 table 中的几个有一个用户 editable 列,它也是一个主键。
我正在尝试设置 Sequel 以在 MySQL 引发错误之前捕获应用程序本身内的任何重复错误。我假设 Sequel 中的验证助手可以帮助我做到这一点,但看起来它们在数据保存之前不会启动。
我的SQLtable定义为:
CREATE TABLE `dblocations` (
`code` varchar(3) NOT NULL,
`description` varchar(100) NOT NULL,
PRIMARY KEY (`code`)
)
和我的Sequel模型定义如下:
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'
我是否错误配置了我的验证或者我需要调用另一个插件?
insert
是数据集级别的方法,验证是模型级别的。您可能想使用 create
而不是 insert
.