【问题标题】:Save (possibly) duplicate Sequel Model instance保存(可能)重复的 Sequel Model 实例
【发布时间】:2017-04-15 04:52:51
【问题描述】:

在 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,但没有找到我要找的东西。有什么办法可以做到吗?

【问题讨论】:

    标签: ruby sequel


    【解决方案1】:

    我以前没有使用过 Sequel,但您始终可以使用 begin/rescue 块包装保存调用,然后直接吞下错误而不做任何事情(您几乎总是想做某事)。

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

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

    【讨论】:

      【解决方案2】:

      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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-20
        • 1970-01-01
        • 1970-01-01
        • 2014-01-13
        • 2012-05-03
        • 1970-01-01
        • 2011-10-20
        相关资源
        最近更新 更多