ActiveRecord 数据库中的 Ruby 日期时间格式

标签 ruby activerecord

我需要以这种格式保存日期时间属性:YYYY-MM-DD HH:SS。我在数据库中有一个日期时间字段:

schema.rb:

create_table "stats", force: :cascade do |t|
  ...
  t.datetime "check_time"
end

params 中的数据如下所示:

{"check_time"=>"2018-01-02 04:57"}

但是它在数据库中保存为 2018-01-02 04:43:00 UTC: enter image description here

Stat.last.check_time #=> check_time: "2018-01-02 04:43:00"

(所以最后有几秒钟)

然后在我的 "/status" 端点中,我将统计数据作为 JSON 返回:

get '/status' do
  { stats: Stat.last }.to_json
end

然后 check_time 看起来像这样:

"check_time":"2018-01-02T04:43:00.000Z"

这是怎么回事?我在这里错过了什么吗?数据库中是否有错误的数据类型字段?

最佳答案

ActiveRecord 将列转换为 DateTime 对象,由 ActiveSupport 扩展(融入 Rails)

你要查找的是 strftimeto_formatted_s(别名为 to_s。)

引用这里http://api.rubyonrails.org/v5.1/classes/DateTime.html#method-i-to_formatted_shttp://foragoodstrftime.com

没有必要乱用 ActiveRecord 编写器方法,除非您真的知道自己在做什么,否则永远不要那样做。您不需要以特定格式将其保存到数据库中——当时是一种非标准格式——只需在需要时对其进行格式化并保留数据库的日期时间式列的所有优点。

关于ActiveRecord 数据库中的 Ruby 日期时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055488/

相关文章:

ruby - 在ruby中将字符串转换为十进制数

ruby-on-rails - database.yml 中应该包含什么以在没有数据库的情况下使用 rails?

activerecord - 关联表上的多次反向查找

ruby - 如何从命令行调用旧版本的 gem?

ruby-on-rails - 使用 Rails 在 PaperClip 中文件上传 Base64 编码的字符串

ruby - 如何在 Ruby 中使用 Nokogiri 解析 HTML

ruby-on-rails - 如何在 ruby​​ on rails 中为单个用户创建多个角色?

ruby-on-rails - 接受具有虚拟属性的嵌套属性

ruby-on-rails - rails 3.1 : can't write to column in same migration that adds it

ruby-on-rails - rails rbenv : rails: command not found