通知機能を作成したものの…
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という完璧な方法がありました…とほほ

