这是我第一次在非 Rails 应用程序中使用 ActiveRecord,我遇到了问题。ActiveRecord 能够找出我的 sqlite3 数据库中的列,但由于某种原因它无法找出默认列值。
这是相关表的 sql 描述。
-- Describe ACCOUNTS
CREATE TABLE "accounts" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL DEFAULT (0),
"username" TEXT NOT NULL,
"password_hash" BLOB NOT NULL,
"creation_time" INTEGER NOT NULL DEFAULT(strftime('%s', 'now')),
"expiration_time" INTEGER NOT NULL DEFAULT(strftime('%s', 'now') + 2592000)
)
我使用以下代码加载我的数据库文件。
require 'active_record'
require './config.rb'
ActiveRecord::Base.establish_connection(
:adapter => 'sqlite3',
:database => DB_FILE
)
class Account < ActiveRecord::Base
end
当我使用 REPL 查看 Account 表的列默认值时,我得到的是:
[10] pry(main)> Account.column_defaults
=> {"id"=>0,
"username"=>nil,
"password_hash"=>nil,
"creation_time"=>0,
"expiration_time"=>0}
我之前曾为 Rails 应用程序使用过 ActiveRecord,它足够聪明,可以找出默认值。由于某种原因,它现在无法弄清楚它们。
我在这里做错了吗?我读到我可以手动指定默认值default :id => bla
,但 ActiveRecord 不应该能够找出默认值吗?
更新:我想我想出了一个解决方法。返回的哈希Account.column_defaults
是可写的,并且更改这些元素似乎工作正常。