Railsのオブザーバまとめ

こんにちは、鈴木です。

今回は Rails のオブザーバの話をします。

 

オブザーバとは

Rails のオブザーバとは、デザインパターンの Observer パターンを実現する仕組みです。

可能なことはコールバックと同じで、バリデーションやデータベースへの保存が行われるタイミングで行う処理を記述することができます。

コールバックとオブザーバのどちらを利用するかは、その処理がモデルの一貫性を保つために必要であるかという基準で考えると良いでしょう。

保存前に入力されたパスワードをハッシュ化するのであればコールバック、会員登録後に登録完了メールを送信するような場合はオブザーバが適しています。

 

オブザーバの作成

オブザーバは以下のような ActiveRecord::Observer を継承したクラスです。

ソースファイルは app/models 以下に保存します。

scaffold を利用するのであれば、以下のコマンドでオブザーバを作成できます。

例えば、User モデルのオブザーバを作成するのであれば、以下のコマンドを実行します。

実行すると、app/models/user_observer.rb が作成されます。

オブザーバの実装はコールバックと同じで、before_save や after_create などのメソッドを定義します。

以下のような感じです。

何らかの事情でモデルとオブザーバの名前を合わせることができない場合は、以下のように observe メソッドで対象とするモデルを指定することができます。

 

オブザーバの設定

作成したオブザーバを有効にするには、config/application.rb で指定する必要があります。

実行環境によってオブザーバの有効/無効を切り替えたい場合は、config/environments 以下の環境ごとの設定ファイルに記述します。

 

複数のモデルを対象とするオブザーバ

複数のモデルに対して、同じオブザーバを設定したい場合があります。

例えば、ブログ記事や商品購入履歴などのモデルがあるとします。

そして、これらのオブジェクトが登録されたとき (= ブログ記事の投稿や商品を購入したとき) にポイントを付与するオブザーバを作成する場合は、以下のように observe メソッドで対象とするモデルを指定します。

こうすることで、一つのオブザーバを複数のモデルに結び付けることができます。

 

まとめ

今回はオブザーバの話をしました。

コールバックとオブザーバはどちらも同じことができますので、どちらを使うべきか見極めた上で活用しましょう。

 

Comments are closed, but you can leave a trackback: Trackback URL.