【初学者必見】 投稿時刻の表示を日本時刻に変更してみた 【l(エル)メソッド】


Railsで作ったアプリのデータベースから情報を引っ張り出してcreated_atやupdated_atを出力すると日本時刻ではありません。
そのため、
1. 設定ファイルで時刻を日本時刻に変更する
2. l(エル)メソッドを用いて時刻を表示する
を実行し、直していきます。

1. 設定ファイルで時刻を日本時刻に変更する

その前に↓

設定ファイルってなに??

railsでは、configディレクトリにて実行環境に関する物を管理しています。
configディレクトリのapplication.rbファイルでは、そのRailsアプリケーションの開発環境すべてにおいて共通となる設定が記述されています。

まず、config/application.rbファイルを開き、以下の設定を追加します。

config/application.rb
module ”アプリ名”
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.0

    config.i18n.default_locale = :ja   # ←←←←←←←←この行を追加
    config.time_zone = 'Tokyo'         # ←←←←←←←←この行を追加

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
  end
end

次に、config/localesディレクトリに「ja.yml」というファイルを作成して、以下のように記述します。

config/ja.yml
ja:
  time:
    formats:
      default: "%Y/%m/%d %H:%M:%S"

これで時刻の変更の設定が終わりました!

2. l(エル)メソッドを用いて時刻を表示する

その前に↓

l(エル)メソッドとは

l(エル)とは英語でlocalizeの頭文字からとって来ています。
"localize" 即ち、現地に対応させるっていう意味ですね。
このメソッドは日付や時刻を表す際に使いますが、指定した現地時間に対応させる事ができます!

以下のようにviewファイルに書いてみます。

app/views/reviews/index.html.erb
<h4 class="title is-2 is-centered has-text-white">クチコミ</h4>
<% @reviews.each do |review| %>
<div class="card review_card mb-4">
  <header class="card-header">
    <div class="card-header-title">
      <%= review.user.nickname %>
    </div>
  </header>
  <div class="card-content pt-2">
    <div class="content">
      <div class="star-rating mb-4">
        <div class="star-rating-front" style="width: <%= review.score * 20 %>%">★★★★★</div>
        <div class="star-rating-back">★★★★★</div>
      </div>
      <%= simple_format(review.content) %>
      <div class="has-text-right is-italic" ><%= l review.updated_at %></div>   #←←←←←←←←←←←←←←ココ
    </div>
  </div>
  <% if user_signed_in? %>
    <%if current_user.id == review.user_id %>
      <footer class="card-footer">
        <%= link_to '編集する', edit_agent_review_path(review.agent_id, review.id), method: :get, class: "card-footer-item" %>
        <%= link_to '削除する', agent_review_path(review.agent_id, review.id), method: :delete, class: "card-footer-item" %>
      </footer>
    <% else %>
      <footer class="card-footer">
        <a href="#" class="card-footer-item">コメントする</a>
      </footer>
    <% end %>
  <% end %>

</div>
<% end %>

ただ、<%= l review.updated_at %>のように出力したい変数の前に”l”(エル)を加えるだけ!
ちゃんとサーバーを再起動してくださいね!

l(エル)メソッドを使う事によって簡単に、あらかじめ設定した日本時刻のフォーマットを通して、投稿時刻の日本時間への修正ができました。

最後に

私の初めてのQiitaの投稿はいかがでしたでしょうか。
間違っている点やわかりにくい点があったらお気軽に教えてください!
では次回の投稿でお会いしましょう。