保存(可能)重复的续集模型实例

时间:2016-12-15 19:59:40

标签: ruby sequel

在Sequel中,如果你有一个名为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,但我还没找到我要找的东西。有没有办法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

之前我没有使用过Sequel,但是你总是可以用一个开始/救援块来保存调用,只是在没有做任何事情的情况下吞下错误(你几乎总是想做一些事情)。

<form id="payment" name="payment" method="post"    action="https://sci.interkassa.com/" enctype="utf-8">
...
<input type="hidden" name="ik_am_t" value="payway" />
</form>

<input type="submit" id="submitButton" value="ОПЛАТИТЬ" id="sub"/>

注意:您可能需要上述begin row = MyModel.new(col1, col2) row.save rescue Sequel::DatabaseError => e # handle error here end 以外的其他内容。

答案 1 :(得分:0)

Sequel区分新创建的Model对象和从数据库中提取的Model对象 - 即使它们包含相同的数据。例如,如果我们得到这样的记录,保存到数据库将成功:

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

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

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

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