LoginSignup
0
1

More than 3 years have passed since last update.

created_atで与えられる日時を整形する

Last updated at Posted at 2020-07-02

 
sqlで生成されるcreated_atを整形するのに悩んだため、その実装方法のメモ

sqlファイル

テーブルを作成する。

table.sql
create table todos
(
  id integer PRIMARY key,
  body text,
  created_at
);

rbファイル

active recordを用いて、先ほど作成したtodosテーブルをオブジェクトに結びつける。

tlist.rb
class Todos < ActiveRecord::Base
  validates :body, presence: true
end

 

オブジェクトをインスタンス変数に格納する。

tlist.rb
get '/' do
  @todos = Todos.all
  erb :index
end

erbファイル

時刻を表示してみる。

index.erb
  <div class="user_box">
    <p class="user_name">しゅうと</p>
    <ul>
      <% @todos.where(users_userName: "しゅうと").each do |todo|%>
      <li data-id = "<%= todo.id%>" data-token = "<%= Rack::Csrf.csrf_token(env)%>">
          <div class="one">
            <%= Rack::Utils.escape_html(todo.body)%>
          </div>
          <div class="time">
            <%= todo.created_at%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>

 

実行したところ、不要な部分があるので整形したい。
スクリーンショット 2020-07-02 22.21.28.png

調べたところ、strftimeメソッドで整形できる模様。
メソッドを適用して実行。

index.erb
  <div class="user_box">
    <p class="user_name">しゅうと</p>
    <ul>
      <% @todos.where(users_userName: "しゅうと").each do |todo|%>
      <li data-id = "<%= todo.id%>" data-token = "<%= Rack::Csrf.csrf_token(env)%>">
          <div class="one">
            <%= Rack::Utils.escape_html(todo.body)%>
          </div>
          <div class="time">
            <%= todo.created_at.strftime("%Y/%m/%d %H:%M:%S")%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>

 

文字列だと怒られました。

スクリーンショット 2020-07-02 22.22.14.png

文字列以外に変換する必要があるみたいなので、date型に変換してみる。

index.erb
  <div class="user_box">
    <p class="user_name">しゅうと</p>
    <ul>
      <% @todos.where(users_userName: "しゅうと").each do |todo|%>
      <li data-id = "<%= todo.id%>" data-token = "<%= Rack::Csrf.csrf_token(env)%>">
          <div class="one">
            <%= Rack::Utils.escape_html(todo.body)%>
          </div>
          <div class="time">
            <%= todo.created_at.to_date.strftime("%Y/%m/%d %H:%M:%S")%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>

 

日付は合っているが、時刻がおかしい。
スクリーンショット 2020-07-02 22.23.14.png

time型に変換して実行してみる。

index.erb
  <div class="user_box">
    <p class="user_name">しゅうと</p>
    <ul>
      <% @todos.where(users_userName: "しゅうと").each do |todo|%>
      <li data-id = "<%= todo.id%>" data-token = "<%= Rack::Csrf.csrf_token(env)%>">
          <div class="one">
            <%= Rack::Utils.escape_html(todo.body)%>
          </div>
          <div class="time">
            <%= todo.created_at.to_time.strftime("%Y/%m/%d %H:%M:%S")%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>

 

きちんと表示されました。
スクリーンショット 2020-07-02 22.23.43.png

どんな形式で与えられているのか、エラーに直面した際には調べる必要性がありますね。

なおこのアプリケーションの原型はドットインストールのsinatra入門を参考にしています。

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