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

Railsガイド メモ 7

programming

今日は第5章 Active Record コールバック から。


  • コールバックの宣言は protected または private キーワードの後で行なうのが好ましい 方法です。コールバックメソッドが public な状態のままだと、このメソッドがモデルの 外から呼び出され、オブジェクトのカプセル化の原則に違反する可能性があります。

  • Active Record で利用可能なコールバックの一覧を以下に示します。これらのコール バックは、実際の操作中に呼び出される順序に並んでいます。

  • 5.3.1 オブジェクトの作成

    • before_validation
    • after_validation
    • before_save
    • around_save
    • before_create
    • around_create
    • after_create
    • after_save
  • 5.3.2 オブジェクトの更新

    • before_validation
    • after_validation
    • before_save
    • around_save
    • before_update
    • around_update
    • after_update
    • after_save
  • 5.3.3 オブジェクトの destroy

    • before_destroy
    • around_destroy
    • after_destroy
  • after_save は作成と更新の両方で呼び出されますが、コールバッ クマクロの呼び出し順にかかわらず、必ず、より具体的な after_create および after_update より 後 に呼び出されます。

  • after_find と after_initialize が両方定義されている 場合は、after_find が先に実行されます。

  • 5.3.5 after_touch after_touch コールバックは、Active Record オブジェクトがタッチされるたびに呼 び出されます。このコールバックは belongs_to と併用できます。

  • コールバックの連鎖の全体は、1 つのトランザクションに含まれます。 before コール バックの 1 つが false を返すか例外を発生するという動作をする場合、実行の連鎖全体 が停止して ROLLBACK が発行されます。 after コールバックの場合は例外を発生する ことによってのみ、コールバックの連鎖を停止することができます。

  • ActiveRecord::Rollback を除いて、コールバック連鎖後に Rails に よって再発生したあらゆる例外は停止します。ActiveRecord::Rollback 以外の例 外が発生すると、save や update_attributes などのようにメソッドが例外を発生 することを想定していないコード (通常 true または false のいずれかを返します) は中断します。

  • 5.7 コールバックはモデルのリレーションシップを経由して動作できます。

  • 5.9 コールバッククラス うまく書けたコールバックメソッドを他のモデルでも使い回したくなることもありま す。Active Record は、コールバックメソッドをカプセル化したクラスを作成できますの で、簡単に再利用できます。

  • 5.10 トランザクションコールバック データベースのトランザクションが完了したときにトリガされるコールバックが 2 つあります。after_commit と after_rollback です。

  • after_commit コールバックおよび after_rollback コールバックは、 1 つのトランザクションブロック内におけるあらゆるモデルの作成/更新/destroy 時 に呼び出されます。これらのコールバックのいずれかで何らかの例外が発生すると、 例外は無視されるため、他のコールバックに干渉しません。従って、もし自作のコー ルバックが例外を発生する可能性がある場合は、自分のコールバック内で rescue し、適切にエラー処理を行なう必要があります。


第5章 Active Record コールバックを読了した。 が、読んだだけの部分も多い。トランザクションコールバックのサンプル作って動かしてみたい。