private!

privateの意味は、メソッドを関数形式でだけ呼び出せるようにし、レシーバー形式では呼び出せないようにするという意味です。したがって、可視性がprivateなメソッドは、自クラス及びサブクラスからしか参照できません。

protectedも同様に、自クラス及びサブクラスからしか参照できませんが、関数形式でもレシーバー形式でも呼び出せます。

メソッドのカプセル化に必要な機能です。

プログラミング言語 Ruby リファレンスマニュアル

なん…だと…。 こんな基本的なことに今まで気づかなかったとは><


というわけでid:koumiya氏に教えていただいた通り、アクションをまるごとトランザクションにぶち込むのは以下で可能でした。

def perform_action_without_rescue_with_tx
  ActiveRecord::Base.transaction do
    perform_action_without_rescue_without_tx
  end
end
alias_method_chain :perform_action_without_rescue, :tx

create後にraiseしてロールバックされてることも確認しました。 やっほい。