14
10

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 5 years have passed since last update.

Rails コールバックのbefore_createについて

Posted at

以下のような、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

14
10
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
14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?