これはHubble Advent Calendar 2023の5日目の記事です。
はじめに
はじめまして、株式会社Hubbleのしがないバックエンドエンジニアです。
名乗るほどの者でもありませんので、どうぞお好きお呼びなすってくだせえ。
今回Hubble Advent Calendar 2023にて、5日目の記事を担当させていただくことになりました。
何書こうかなーと思っていたんですが、
直近で巧妙なトラップに引っ掛かったので、ちょっと 愚痴 備忘録も兼ねて残しておこうと思います。
そんなにボリュームもないのでサクッと読んでいただけると思います!
RailsのActive Record callbackについて
Railsを使っていたらお世話になっている方も多いと思いますが、
せっかくなので、今をときめくChatGPTさんに一言で表してもらいました。
RailsのActiveRecordのcallbackは、
一言で言えば「モデルのライフサイクル中の特定の時点で自動的に呼び出されるメソッド」です。
これらのコールバックは、オブジェクトが保存、更新、削除されるなどの特定のイベントが発生したときに実行されるもので、
データの整合性を保つためや、関連するアクションを自動化するために使用されます。
そうそう、それそれ!いやぁ、言いたいこと全部言ってくれた!
after_commitコールバックについて
こちらも最早説明不要だと思いますが、
前述のコールバックの一種で、その名の通り、commit後に呼び出されるメソッドです。
本題
実はafter_callbackには種類がありまして、
- after_create_commit
- after_update_commit
- after_destroy_commit
- after_save_commit
とそれぞれの用途に応じて用意されています。
ただし、これらはいずれもafter_commitエイリアスであってメソッドではないため、
例えば以下の様に記述すると、1つ目のcallbackは2つ目のcallbackで上書きされ、動作しません。
class User < ApplicationRecord
after_create_commit :log_user_saved_to_db
after_update_commit :log_user_saved_to_db
private
def log_user_saved_to_db
puts 'ユーザーはデータベースに保存されました'
end
end
これを知らなくてちょっとハマりましたが、
後で調べたら、かの有名なRailsガイドに、ゴリゴリに書いてあるのを見つけました。
正直納得いかなかった(そんな紛らわしいもの用意すんなよ...)んですが、
タダで使わせて貰っている身でありながらそんな事を思ってしまった自身が恥ずかしくなり、
如何に驕り高ぶっていたのかと反省するとともに、
心身ともに清めるために滝修行しなくてはいけない...と思いましたが、やめました。
教訓
ちゃんと使う前に、信頼性の高いソースを見て挙動を把握しようね!
ChatGPTは全知全能ではありません、ご利用は計画的に!
最後に
Hubbleの名誉のために記載しておきますが、決してアドカレはやらされている訳ではありません。
もしJoinしたらこれやらないと行けないのか...などと思われている方がいらっしゃれば、その点はご安心ください笑
Hubbleは本人の意思を尊重する自由な風土がモットーです!
明日は@yuto_1220さんの投稿です!お楽しみに!