読者です 読者をやめる 読者になる 読者になる

switch_pointを使った際に複数モデルの更新にトランザクションをかける

switch_pointを使った際に複数モデルの更新にトランザクションをかけるのに少しハマった。 最初以下のように書いた。

ActiveRecord::Base.transaction do
  ModelA.with_writable do
    save!
    modelB.save!
  end
end

ただこれだとrollbackされない。 以下でもダメ。

ModelA.with_writable do
  ActiveRecord::Base.transaction do
    save!
    modelB.save!
  end
end

以下のようにするとrollbackされる。

ModelA.transaction_with do
  save!
  modelB!
end

transaction_withはswitch_pointが定義しているメソッド https://github.com/eagletmt/switch_point/blob/823cce68aab1cfad4e17e3796a1bfd9a35504681/lib/switch_point/model.rb#L71