12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

HubbleAdvent Calendar 2023

Day 7

Railsのcallback(after_commitエイリアス系)に意地悪されたので先生に言いつけなかった話

Last updated at Posted at 2023-12-06

これは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さんの投稿です!お楽しみに!

12
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?