通知機能を作成したものの…
RailsでQiitaのようなアプリを作成して、通知機能を作成した。
ちなみに参考にした記事はこちら。めっちゃわかりやすい。
https://rails-school.net/rails-notification/
ただ、何もしないと、
こんな感じになってしまう。なんというか、しっくりこない!
これはNotificationモデルのcreated_at
を列挙しているだけなので、機械的に時間を列挙している。
いい感じの「○日前」「○分前」を検討した。
もっと通知っぽくしたい!
そこで、ツイッターの通知みたいないい感じの「○日前」「○分前」を検討した。
条件 | 表示例 |
---|---|
60分以内 | "10分前" |
24時間以内 | "5時間前" |
30日以内 | "14日前" |
それ以前 | created_atそのまま |
これならばいい感じに通知っぽくなるのではないか!
こんな感じの時間表示をしてくれるメソッドやgemを探したけれど特に見つからなかったので自分で作ることにした。
それがこちら
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_at
をnotification.how_long_ago
に変えてみると、
いい感じに通知っぽくなった!
追記
time_ago_in_words
という完璧な方法がありました…とほほ