railsで日時のフォーマットをするときのlメソッドをmodelとかでも使う
Rubyで時刻をお好きな書式に従って文字列に変換するときはstrftime
を使う。
こんな感じ
time = Time.new(2022, 12, 18, 10, 11, 12)
time.strftime('%Y-%m-%d') # 2022-12-18 と出る
ただ、このstrftimeをいろんなところで使うと、時刻の表示形式を変えたい、なんてときに面倒くさいことになる。
で、railsならconfig/locales/ja.yml
とかにフォーマットを書いておくとそれをl
メソッドで呼び出して使うことができる。
これなら、書式変える時も一箇所変えれば全て変わるので楽だ。
以下のように、お好きなformats:
を設定しておく。short:
でもいいし、long:
とかdash:
とか好きな言葉でいいと思う。
ja:
date:
formats:
short: '%m/%d'
これであとはviewの中だったらこんなふうにlメソッドを呼び出せばOK
format:
のところにymlで設定したシンボルを指定してあげる。ここを取り換えれば複数のフォーマットを出し分けもできる。
<%= l model.created_at, format: :short %>
やっとこの記事の本題です。
viewファイル以外でこのlメソッドを呼び出したいときは、頭にI18n.
をつけてあげればOK
すばらしい。
class MyClass
def date_text
I18n.l Date.current, format: :short
end
end
m = MyClass.new
puts m.date_text # 12/3 みたいに表示される
最初、include ActionView::Helpers::TranslationHelper
をクラスに書いていたのだけど普通にI18nをつけるだけでよかった。
lメソッドについてのもっと詳しい解説はこちらで書かれています。
【初心者向け・動画付き】Railsで日時をフォーマットするときはstrftimeよりも、lメソッドを使おう
この記事の環境情報
- Ruby 3.1.2
- rails 7.0.4
railsに関する他の記事を読む
- omniauth-google-oauth2でscopeを追加するときはemailが必須だった
- google-api-clientを指定してinstallするのはもう非推奨になっていた
- OmniAuthでdeveloper providerを使ってダミーログインをする
- [Rails]取得したクラス名をキャメルケースからスネークケースに変換する
- urlヘルパーをモデルなどでも使う方法
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら