2016-12-15 12 views
0

在續集中,如果你有一個名爲爲MyModel模型類,你可以做這樣的事情:保存(可能)複製續集Model實例

#make MyModel instance 
row = MyModel.new(column1, column2) 
#save it to the database Sequel is connected to 
row.save 

然而,「row.save」會,如果你失敗保存重複的主鍵。

我正在尋找一種方法,將保存一個值的數據庫,如果主鍵不重複,並保存一切,沒有失敗,否則。

我已經瀏覽了instance methods for Sequel Model,但我還沒有找到我要找的東西。有什麼辦法可以做到這一點?

回答

1

我以前沒有用過續集,但是你總是可以打電話來保存一個開始/救援塊,並且不用做任何事情就吞下這個錯誤(你幾乎總是想做點什麼)。

begin 
    row = MyModel.new(col1, col2) 
    row.save 
rescue Sequel::DatabaseError => e 
    # handle error here 
end 

注意:您可能需要比上述DatabaseError以外的東西。

0

續集區分從數據庫中獲取的新創建的模型對象和模型對象 - 即使它們包含相同的數據。舉例來說,如果我們得到這樣的記錄,保存到數據庫會成功:

row = MyModel.where(:column1 => column1, :column2 => column2) 
row.save 
#save succeeds 

如果我們用相同的值的新對象,並將其保存到數據庫中,保存操作將失敗:

row = MyModel.new(column1, column2) 
row.save 
#save returns duplicate primary key error 

要更新數據庫中的值而不會出現重複的主鍵錯誤,請使用相關主鍵(如果存在)提取記錄,對其進行修改並保存。