直感的に Users.create が独立してるように見えてトランザクション管理されないように感じるんだけど、 素直に transaction を使えばいい。
require 'rubygems' require 'sequel' # DB オープン DB = Sequel.sqlite("transaction.db") # テーブルを生成 unless DB.table_exists? :users DB.create_table :users do primary_key :id text :screen_name, :unique => true text :description end end # モデル定義 class Users < Sequel::Model ; end # テーブルからレコードを削除 Users.delete # レコードを追加 Users.create( :screen_name => "aaaa", :description => "ああああ" ) # トランザクション開始 DB.transaction do # レコードを追加 Users.create( :screen_name => "bbbb", :description => "いいいい" ) # エラー発生。コミットがロールバックされる。 raise "コミットさせないよエラー" end
screen_name => "aaaa" のレコードが追加されるけど、"bbbb" のレコードは追加されない。