2016-12-15 4 views
0

を複製重複している主キーを保存します。保存(おそらく)あなたがmymodelという呼ばれるモデルクラスを持っている場合、あなたはこのような何かを行うことができ、続編では続編のモデルインスタンスに

プライマリキーが重複していない場合は何も保存せず、それ以外の場合はデータベースに値を保存するメソッドを探しています。

私はinstance methods for Sequel Modelを調べましたが、私が探しているものが見つかりませんでした。私はこれを行う方法がありますか?

答えて

1

私はSequelを使用していませんが、begin/rescueブロックで保存するための呼び出しをラップすることができ、何もせずにエラーを飲み込むことができます(ほとんどいつもやりたいことです)。

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

注:上記のDatabaseError以外のものが必要な場合があります。

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 

重複した主キーエラーを発生させずにデータベースの値を更新するには、関連する主キー(存在する場合)を使用してレコードをフェッチし、変更してから保存します。

関連する問題