У меня есть проект Ruby/Padrino с использованием Sequel ORM для доступа к устаревшей базе данных в MySQL. Проблема, которую я испытываю, состоит в том, что в нескольких таблицах есть редактируемый пользователем столбец, который также является Первичным ключом.Ошибки ограничения прерываний в продолжении ORM перед сервером
Я пытаюсь настроить Sequel, чтобы поймать любые ошибки дублирования в самом приложении, прежде чем MySQL сможет выдать ошибку. Я предположил, что помощники проверки в Sequel могут помочь мне сделать это, но, похоже, они не пинают до того, как данные будут сохранены.
My SQL таблица определяется как:
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'
Я неправильно сконфигурировал свои проверки или есть другой плагин, который мне нужно вызвать?
Спасибо - я не узнал разные уровни между наборами данных и моделью. 'Location.create (...)' отлично работает. Pro Tip: Мне сначала нужно было сделать «Location.unrestrict_primary_key», так как «код» - это ПК, который я меняю вручную. – CyberFerret