質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

1256閲覧

現在時刻がDBに保存されない

tomoharu

総合スコア107

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

1グッド

0クリップ

投稿2021/04/04 06:14

環境
・rails5
・postgresql
になります。

やりたいこと
・Tokyoの時間でDBにレコードを保存したい

現状
・rails コンソールで

$Status.create => INSERT INTO "statuses" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id" [["created_at", "2021-04-04 15:01:19.071332"], ["updated_at", "2021-04-04 15:01:19.071332"]] $Status.last => <Status id: 326, shop_name: nil, created_at: "2021-04-04 06:01:19", updated_at: "2021-04-04 06:01:19">

コマンドを打つと上記のようになり、createでinsertした時間がDBに保存されません。

#application.rb class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.2 config.time_zone = 'Tokyo' config.active_record.default_timezone = :local # Settings in config/environments/* take precedence over those specified here. # Application configuration can go into files in config/initializers # -- all .rb files in that directory are automatically loaded after loading # the framework and any gems in your application. end

で記述しています。
dbの設定ですが、

$rails db; # show timezone; => TimeZone ------------ Asia/Tokyo

となります。
設定後サーバーは再起動しています。
ちなみにTime.currentを打つと、localの正しい時間が描画されます。

$Time.current => Sun, 04 Apr 2021 15:13:07 JST +09:00

こちらDBに現在の日本時間が保存されるようにしたいのですが、方法がわからずにいます。
何卒よろしくお願いします。

seastar3👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PostgreSQL

1 "2021-04-04 15:01:19.071332"

の日付時刻型の値がはじかれているのではないでしょうか。
to_timestamp関数で整形してから、代入したらよいでしょう。

PostgreSQL

1 "2021-04-04 15:01:19"

投稿2021/04/04 08:45

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomoharu

2021/04/04 15:53

小数点みたいな物がついてますね。。。気がつきませんでした。。ありがとうございます。 この小数点のようなものってrailsの標準でしたでしょうか?
seastar3

2021/04/04 21:49

Rubyの仕様としてsecondsオブジェクトは整数だけではなく浮動小数点形式も指定できるようです。 [Ruby 3.0.0 リファレンスマニュアル ライブラリ一覧 組み込みライブラリ Timeクラス](https://docs.ruby-lang.org/ja/latest/class/Time.html) もっと精度の高いusecというオブジェクトもありますね。
tomoharu

2021/04/06 02:28

あ というよりはDBのデフォルトでミリ秒まで自動保存されてしまうのが標準なのかなと。。。 これだと、全てのrailsプロダクトがこのミリ秒を削除する処理を書かなければならないような気がしまして。。。postgresの仕様ですかね。。。?
tomoharu

2021/04/06 15:04

ご回答ありがとうございます。どうもpostgresqlではなく、ruby 2.7の仕様らしいですね。。。 https://secret-garden.hatenablog.com/entry/2019/12/26/223046 ``` before_create :fix_ms private def fix_ms self.created_at = self.created_at.change(:usec => 0) end ``` とりあえず上記コードで対応できたので解決済みにします。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問