LoginSignup
3
2

More than 3 years have passed since last update.

【Rails】保存前に加工する

Posted at

はじめに

オーバーライドをすることで、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

まとめ

自分用のまとめとなってしまいましたが、どなたかの参考になればなと思います。

参考

3
2
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
3
2