Rails ActiveRecord Timestamp in Epoch instead of DateTime Format
需要在Epoch中存储created_at和updated_at时间戳而不是DateTime格式。 有没有办法改变默认行为,同时让ORM完成维护时间戳的工作。
当我使用Rails Generator生成我的模型时
1 2 3 4 5 6 7 8 9 10 11 12 13 | class CreateTenants < ActiveRecord::Migration[5.0] def change create_table :tenants do |t| t.string :tenant_name t.string :tenant_owner_name t.string :tenant_address t.string :tenant_email t.integer :pincode t.timestamps end end end |
不是转换为DateTime的时间戳。
1 2 3 4 5 6 7 8 9 | create_table"tenants", force: :cascade, options:"ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "tenant_name" t.string "tenant_owner_name" t.string "tenant_address" t.string "tenant_email" t.integer "pincode" t.datetime"created_at", null: false t.datetime"updated_at", null: false end |
我知道我可以直接创建两列,并在每次添加/更改记录时手动更改created_at和updated_at字段,但这将是应用程序中引入的大量错误代码冗余代码。
我需要的是以某种方式将时间戳以时期格式(自1970年以来的时间为Long)存储而不是DateTime。
谢谢
你没有指定使用的数据库,所以我在这里假设MySQL。事实证明,Rails支持时间戳的所有日期/时间列变体:
1)
如果要将时间戳存储在
1 2 3 4 5 6 7 | create_table :tenants do |t| # ... #t.timestamps (remove the default timestamps definition) t.column :created_at, 'timestamp ', null: false t.column :updated_at, 'timestamp ', null: false end |
处理记录时,时间戳将显示为通常的日期时间,但将作为
1 2 3 | Tenant.create! # => SQL (0.1ms) INSERT INTO `tenants` (`created_at`, `updated_at`) VALUES ('2016-06-08 08:45:20', '2016-06-08 08:45:20') => #<Tenant id: 1, tenant_name: nil, tenant_owner_name: nil, tenant_address: nil, tenant_email: nil, pincode: nil, created_at:"2016-06-08 08:45:20", updated_at:"2016-06-08 08:45:20"> |
当然,您可以使用
1 2 | Tenant.last.created_at.to_i # => 1465375595 |
2)
如果要将时间戳确实存储为自Epoch(1970)以来的秒数,只需将时间戳列定义为
1 2 3 4 5 6 7 | create_table :tenants do |t| # ... #t.timestamps (remove the default timestamps definition) t.integer :created_at, null: false t.integer :updated_at, null: false end |
然后,记录中的时间戳也在Rails中显示为整数:
1 2 3 | Tenant.create! # => SQL (0.2ms) INSERT INTO `tenants` (`created_at`, `updated_at`) VALUES (1465375595, 1465375595) # => #<Tenant id: 1, tenant_name: nil, tenant_owner_name: nil, tenant_address: nil, tenant_email: nil, pincode: nil, created_at: 1465375595, updated_at: 1465375595> |