0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsでDBのカラムにtime型を使ってみた

Last updated at Posted at 2024-10-18

先日、日時は必要のない時間だけを扱うカラムを作成しようとして、初めてTime型という型を使ったのですが、そこで少しハマったので記事にしてみました。
Time型についてあまり知らない、使ってみたいよって方はぜひ読んでみてください。

環境

Rails7
PostgreSQL

起こったこと

コンソールで作成したTime型のカラムを含むテーブルを試しにコンソールで作成してみると、このようなデータが作成されてしまいました。
(対象カラムはstart_timeとend_timeです。)

image.png

Time型で作成したのに、なぜ?
DBで確認してみるとちゃんと時間だけが保存されてました。

image.png

理由

なぜだろうと思いググってみると、こちらの記事を見つけました。
https://blog.willnet.in/entry/2015/06/12/063731

Ruby や Rails には、時間のみを扱うクラスはありません。DB の Time 型は Ruby の Time オブジェクトに変換されます。Time オブジェクトは年月日の情報を持っています。その際、タイムゾーンは utc (正確には ActiveRecord::Base.default_timezone で設定されたタイムゾーン) として扱われます。

DBのTime型をRailsのTimeオブジェクトが日付を追加していたようでした。
そんな仕様があるとは…

最後に

DBの値をActiveStorage経由で出力する時にどう変換されるのかを意識したことがなかったので、良い機会でした。
DBの内容とActiveStorageを経由した出力結果は必ずしも一緒ではないというのを頭の片隅に入れながら、作業してきたいと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?