Ruby ActiveRecord显示错误的列默认值
这是我第一次在非rails应用程序中使用ActiveRecord,我遇到了一个问题。ActiveRecord能够计算出sqlite3数据库中的列,但由于某些原因,它无法计算出默认列值 下面是有关表的sql描述Ruby ActiveRecord显示错误的列默认值,ruby,database,activerecord,sqlite,column-defaults,Ruby,Database,Activerecord,Sqlite,Column Defaults,这是我第一次在非rails应用程序中使用ActiveRecord,我遇到了一个问题。ActiveRecord能够计算出sqlite3数据库中的列,但由于某些原因,它无法计算出默认列值 下面是有关表的sql描述 -- Describe ACCOUNTS CREATE TABLE "accounts" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL DEFAULT (0), "username" TEXT NOT NULL,
-- 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
我以前为rails应用程序使用过ActiveRecord,它足够聪明,可以计算出默认值。由于某种原因,它现在无法理解它们
我做错什么了吗?我读到我可以用default:id=>bla
手动指定默认值,但是ActiveRecord不应该能够计算出默认值吗
更新:我想我找到了解决办法。
Account.column\u defaults
返回的散列是可写的,更改这些元素似乎可以正常工作。尝试执行以下操作:
class Account < ActiveRecord::Base
after_initialize :default_values
private
def default_values
self.username ||= "default value"
#etc...
end
end
类帐户
由于id
列是autoincrement
,是否有方法获取数据库将使用的下一个id?通常,它会不断增加id,因此如果最后一个项目的id为12,而您将其删除,则下一个项目的id将为13。否,该值在插入数据库后返回到ActiveRecord。
class Account < ActiveRecord::Base
after_initialize :default_values
private
def default_values
self.username ||= "default value"
#etc...
end
end