はじめに
オーバーライドをすることで、saveメソッドやupdateメソッドを実行時にDBへ保存前にカスタムの処理を実行することができます。
基本的なことかもしれませんが、便利で忘れたくないと思ったのでまとめました。
サンプル
tel レコード(電話番号)をもつ User モデルを新規作成する時を例にしてソースコードを説明したいと思います。
Userの新規登録をするときなどに、フォームでは tel を 0312345678 といった0~から始まる番号で入力してもらい、DBで保存するときは+81~からはじまる国際電話番号(E.164形式)に加工したい場合を考えます。
また、表示時には 0312345678 といった0~から始まる番号で表示します。
ソースコード
user.rb
class User < ApplicationRecord
# 表示用の電話番号メソッド
# ( show.html.erb などでは @user.display_tel とすると0~から始まる番号で表示 )
def display_tel
if tel.present? && tel.first == '+'
return tel.sub('+81', '0')
else
return tel
end
end
# DB保存前にE.164形式に加工する(オーバーライド)
def tel=(param)
data = register_tel(param)
write_attribute(:tel, data)
end
# 加工するメソッド
def register_tel(param)
if param.first == '0'
return param.sub('0', '+81')
else
return param
end
end
end
まとめ
自分用のまとめとなってしまいましたが、どなたかの参考になればなと思います。