9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】通知の時間を「○日前」「○分前」のよう表示する便利メソッドを見つけた

Last updated at Posted at 2018-08-04

通知機能を作成したものの…

RailsでQiitaのようなアプリを作成して、通知機能を作成した。
ちなみに参考にした記事はこちら。めっちゃわかりやすい。
https://rails-school.net/rails-notification/

ただ、何もしないと、

スクリーンショット 2018-08-04 19.20.12.png

こんな感じになってしまう。なんというか、しっくりこない!
これはNotificationモデルのcreated_atを列挙しているだけなので、機械的に時間を列挙している。

いい感じの「○日前」「○分前」を検討した。

もっと通知っぽくしたい!

そこで、ツイッターの通知みたいないい感じの「○日前」「○分前」を検討した。

条件 表示例
60分以内 "10分前"
24時間以内 "5時間前"
30日以内 "14日前"
それ以前 created_atそのまま

これならばいい感じに通知っぽくなるのではないか!
こんな感じの時間表示をしてくれるメソッドやgemを探したけれど特に見つからなかったので自分で作ることにした。

それがこちら

notification.rb
def how_long_ago
  if (Time.now - self.created_at) <= 60 * 60
    # 60分以内なら
    ((Time.now - self.created_at) / 60).to_i.to_s + "分前"
  elsif (Time.now - self.created_at) <= 60 * 60 * 24
    # 24時間以内なら
    ((Time.now - self.created_at) / 3600).to_i.to_s + "時間前"
  elsif (Date.today - self.created_at.to_date) <= 30
    # 30日以内なら
    (Date.today - self.created_at.to_date).to_i.to_s + "日前"
  else
    # それ以降
    self.created_at
  end
end

注意すべきところは二つ
・途中まではDateTime型での引き算になるが、途中からはto_dateメソッドを使ってDate型に変換しないと「○日前」が実際の日付とずれてしまう
・引き算の結果をto_iで整数に変換してto_sで文字列に変換して、文字列を連結させる。

# 結果
notification.created_atnotification.how_long_agoに変えてみると、

スクリーンショット 2018-08-04 19.19.12.png

いい感じに通知っぽくなった!

追記

time_ago_in_wordsという完璧な方法がありました…とほほ

9
7
2

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
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?