以下のような、Railsのコールバックを用いた処理の流れについて解説する。
(処理の内容は、ユーザーが投稿を行ったら、textカラムに保存されるデータの最後に「!」を自動で追加するというもの。)
#1.Railsのコールバックとは何か?
オブジェクトが生成(create)、更新(update)、破壊(delete)される時や、バリデーションを実行する時の前後に共通の処理を追加する仕組みをいう。これはモデル層で指定でき、処理を共通化することによって、モデルの一貫性を保て、またコード量を減らすことができるメリットがある。
以下のコードでは、Railsのコールバックのbefore_createを用いる。これは、オブジェクトがDBに新規保存(create)される直前で実行されるものである。
Rails コールバックのについては、以下の記事を参照。
https://morizyun.github.io/ruby/active-record-callback.html
#2.処理の流れについて
tweet.rb (ツイーツ モデル)
class Tweet < ApplicationRecord
before_create :change_tweet
def change_tweet
self.text = text + "!"
end
end
処理に流れとしては、
before_createが作動して、それに紐づいたchange_tweetメソッドが呼び出される。
そして、change_tweetメソッドの中に定義してあるself.textの処理がなされる。ここでは、self.textの中には、text + "!"という処理が代入されている。textとは、Tweetクラスのインスタンスである。つまり、ユーザーが投稿した個別・具体的なツイート内容のことを意味している。さらに、text の最後に"!"を加える処理が加えて行われる。
<参考記事>
・https://morizyun.github.io/ruby/active-record-callback.html
・http://beck23.hatenablog.com/entry/2014/10/02/020200
・https://tech.kitchhike.com/entry/2018/06/30/232400