開発

[Rails]ActiveModel::Callbacksモジュールについて

今回は実務で使ったActiveModel::Callbacksモジュールのdefine_model_callbacksメソッドについてまとめていこうと思います。

結論から言うと、ActiveModel::Callbacksモジュールは、Active ModelでActive Recordと同じようなコールバック機能の実装を簡単にしてくれるモジュールのことです。

ActiveModelとは

モデルに関するモジュール群を提供しているライブラリで、ActiveRecordの実装にも利用されています。

通常、modelとテーブルは対になってるのですが、ActiveModelを利用することで、データベースと紐づかないモデルを作成することができます。

どういった時に利用するかと言いますと、モデルやコントローラが肥大化しないように機能ごとにモジュールとして分けて作成したときです。その時は、Railsのフレームワークから一度外れてしまうので、ActiveRecordと同じようにオブジェクトを扱うためにはこのモジュールをミックスインする必要があります。

ActiveModel::Callbacksとは

冒頭でも述べましたが、ActiveModel::Callbacksモジュールは、任意のクラスにコールバック機能の実装を簡単にしてくれるモジュールのことです。

このモジュールにより、必要なタイミングで実行されるコールバックを定義することができるようになります。

ActiveRecordのモデルであれば、自動的にコールバックを仕込むことができたのですが、ActiveModelの場合は、一旦Railsのレールから外れているため、ActiveRecordモデルと同じように扱いたいのであればモジュールであるActiveModel::Callbacksをextendして使う必要があります。

class Board
  extend ActiveModel::Callbacks

  define_model_callbacks :run

  def run
    run_callbacks :run do
      true # runメソッドの中身をここに記述する
    end
  end

end

 

define_model_callbacksメソッドは、ActiveModel::Callbacksをextendして、コールバックの対象となるメソッドの名前を指定してやることでそのメソッドを実行することができます。

define_model_callbacksメソッドは、3つの標準コールバック(before, around, after)の全てのコールバックを提供してくれるメソッドになります。

コールバックしたいタイミングを限定したい時はこのように書くことができます。

class Board
  extend ActiveModel::Callbacks

  define_model_callbacks :run, only: %i[after, before]

  def run
    run_callbacks :run do
      true # runメソッドの中身をここに記述する
    end
  end

end

 

その他のコールバックについて

ActiveRecordと同様に、before_createやaround_create、after_createもActiveModel::Callbacksモジュールをミックスインすることで利用することができるようになります。

最後に

最後まで読んでいただきありがとうございました。

私も唐突にこのコードがプロジェクト内で出て来て焦りましたが、一つずつコードを追いかけることでどのようにアプリ上で利用されているのかがわかってスッキリしました。

ActiveModelにはその他にも

  • ActiveModel::Attributes
  • ActiveModel::Serialization
  • ActiveModel::Validations
  • ActiveModel::Model
  • ActiveModel::Conversion
  •  ActiveModel::Dirty
  • ActiveModel::Naming

といったモジュールも用意されておりますので機会があればこちらもブログで触れていければと思います。

今後も実務でわからなかった内容をブログでまとめていこうと思いますので、よろしくお願いします。

 

参考サイト

Railsガイド Active Modelの基礎

https://railsguides.jp/active_model_basics.html#callbacks%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB

ABOUT ME
YasuharaKenta
社会人3年目の年になります。2年間専門商社の営業として従事し、現在は都内でWebエンジニアとして働いています。 新人エンジニアとしてわからないことなどを、分かりやすくブログにまとめれるように頑張っていきます!!
株式会社Playgroundのサービス
  • 無料・簡単・片手でホームページを作成できる自社サービス Rakwi
  • Web制作とアプリ開発を学べるオンラインプログラミング講座 Upstairs
  • 開発,DX推進支援サービス スタートアッププラン

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA