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

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



#sqlファイル
テーブルを作成する。

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


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

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


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


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






#erbファイル

時刻を表示してみる。

```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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644402/b56a1d44-9314-f5b7-022c-c7f4106fd43b.png)


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

```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.strftime("%Y/%m/%d %H:%M:%S")%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>
```

 
　

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

![スクリーンショット 2020-07-02 22.22.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644402/8227de98-b1e7-b329-ef10-11e34eb92145.png)

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

```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.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644402/1f88e837-772a-617b-317c-43993a0986dd.png)
 
 
time型に変換して実行してみる。

```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.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644402/a4390d33-6f3f-a35a-0590-0489825c516d.png)



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

なおこのアプリケーションの原型はドットインストールの[sinatra入門](https://dotinstall.com/lessons/basic_sinatra_v2)を参考にしています。