Rails5 でコールバックを使う
Ruby Ruby on Rails
Published: 2019-05-14

やったこと

Rails5 で Active Record のコールバックを使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

コールバックについて

コールバックとは、オブジェクトのライフサイクル期間における特定の瞬間に呼び出されるメソッドのことです。コールバックを利用することで、Active Recordオブジェクトが作成/保存/更新/削除/検証/データベースからの読み込み、などのイベント発生時に常に実行されるコードを書くことができます。

動作確認

今回は、 after_initialize を使ってみます。

app/controllers/tasks_controller.rb

class TasksController < ApplicationController
  def index
    @task = Task.new
  end
end

app/models/task.rb

class Task < ApplicationRecord
  after_initialize :hogehoge

  def hogehoge
    logger.debug('called hogehoge with after_initialize')
  end
end

after_initialize を使えば、initialize をオーバーライドしなくても良くなります。

after_initializeコールバックは、Active Recordオブジェクトが1つインスタンス化されるたびに呼び出されます。インスタンス化は、直接newを実行する他にデータベースからレコードが読み込まれるときにも行われます。これを利用すれば、Active Recordのinitializeメソッドを直接オーバーライドせずに済みます。

参考