はじめに
こちらの記事で一部、よりDRYな書き方をアドバイスいただいたので、その方法で実装をする。ご指摘いただき、ありがとうございます。
環境
No | 項目 | 内容 |
---|---|---|
1 | OS | Mac |
2 | Ruby | 2.6.3 |
3 | rails | 6.0.4 |
実装
下記のように、lメソッドを使用して、時刻を表示する。
posts/show.html.erb
# <%= post.created_at.to_s(:datetime_jp) %>
# 上記ではなく、下記で記載する。
<%= l object.created_at %>
application.rbに下記を定義する。
config/application.rb
class Application < Rails::Application
I18n.default_locale = :ja
config.time_zone = 'Tokyo'
end
l(エル)メソッドにより、ja.ymlのtime.formats.defaultが呼び出される。
config/locals/ja.yml
time:
formats:
default: "%Y年%m月%d日(%a) %H時%M分%S秒 %z"
default_short: "%Y年%m月%d日"
結果確認
これで、l(エル)メソッドが使える。特にformatsを指定していないため、ja.ymlのdefaultが呼び出される。
posts/show.html.erb
# 再掲
<%= l object.created_at %>

記事を投稿した時の情報としてつけた機能のため、不要な部分を取り除いた値、ja.ymlのdefault_shortを使用することも可能。
posts/show.html.erb
# <%= l object.created_at %>
<%= l object.created_at, format: :default_short %>

ちなみに、今回はjs.ymlで定義したformatをlメソッドによって使用したため、前回作成したconfig/initializers/time_formats.rbは削除可能。
config/initializers/time_formats.rb
# Time::DATE_FORMATS[:datetime_jp] = '%Y年 %m月 %d日'
おわりに
いつもコメントありがとうございます。
とても勉強になりますので、ご指摘がありましたら気軽にコメントお願いします!