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