保存(可能)重复 Sequel 个模型实例

Save (possibly) duplicate Sequel Model instance

在 Sequel 中,如果您有一个名为 MyModel 的模型 class,您可以这样做:

#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,但我没有找到我要找的东西。我有办法做到这一点吗?

我以前没有用过 Sequel,但你总是可以用 begin/rescue 块包装保存调用,然后不做任何事情就吞掉错误(你几乎总是想做一些事情).

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

注意:您可能需要上述 DatabaseError 以外的内容。

Sequel 区分新创建的模型对象和从数据库中获取的模型对象——即使它们包含相同的数据。比如我们得到这样一条记录,存入数据库就成功了:

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

如果我们创建一个具有相同值的新对象并将其保存到数据库中,保存将失败:

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

要更新数据库中的值而不出现重复的主键错误,请获取具有相关主键的记录(如果存在),修改它,然后保存它。