やったこと
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メソッドを直接オーバーライドせずに済みます。