LoginSignup
0
0

More than 1 year has passed since last update.

【超簡単】RubyonRails 投稿時間をInstagramのようにする 〜 ◯日前,◯時間前,◯分前 〜

Posted at

はじめに

とっても雑な記事ですが、少しでも誰かに役に立てばと思い記事にしました。

前提

簡単な投稿機能が実装済みであること
Railsの基礎的な知識を身につけていること

実装方法

コントローラー

投稿時間を計算するために、コントローラーで今日の日付や、現在時刻を取得します。

tweets_controller.rb
class TweetsController < ApplicationController

  def index
    @today = Date.today #今日の日付を取得
    @now = Time.now     #現在時刻を取得
    @tweets = Tweet.all #tweeetsテーブルの全レコードを取得
  end

()
  
  
  

end

ビュー

投稿時間に関するところの解説は下に記載しております。

tweets/index.html.erb
<div>
  <% @tweets.each do |t| %>
    <div class="tweet">
      <%= t.body %>
      <% if (@now - t.created_at) <= 60 * 60 %>
            <%=((@now - t.created_at) / 60).to_i.to_s + "分前" %>
          <% elsif (@now - t.created_at) <= 60 * 60 * 24 %>
            <%=((@now - t.created_at) / 3600).to_i.to_s + "時間前" %>
          <% elsif (@today - t.created_at.to_date) <= 30 %>
            <%= (@today - t.created_at.to_date).to_i.to_s + "日前" %>
          <% else %>
            <%= t.created_at.strftime('%Y-%m-%d') %> 
          <% end %>
    </div>
  <% end %>
</div>

解説(日本語訳)

tweets/index.html.erb
<div>
  <% @tweets.each do |t| %>
    <div class="tweet">
      <%= t.body %>
      <% もし、( 現在時刻 - 投稿時間 )  3600秒以下(60分以下)だったら %>
            <%= 〇〇"分前" %> と表示
          <% もし ( 現在時刻 - 投稿時間 )  86400秒以下(24時間以下)だったら %>
            <%= 〇〇"時間前" %> と表示
          <% もし (今日の日付 - 投稿日)  30日以下だったら %>
            <%=  〇〇"日前" %> と表示
          <% もしそれ以外だったら(投稿日が30日を超過していたら) %>
             投稿時間を yyyy-mm-dd と表示
          <% end %>
    </div>
  <% end %>
</div>

最後に

いかがでしたでしょうか。
とても雑な記事なので編集リクエストなどドシドシお待ちしております。
少しでも開発の手助けとなれば幸いです。
以上、ここまで読んでいただきありがとうございました(^^)

0
0
0

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