Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby ActiveRecord显示错误的列默认值_Ruby_Database_Activerecord_Sqlite_Column Defaults - Fatal编程技术网

Ruby ActiveRecord显示错误的列默认值

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,

这是我第一次在非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
我以前为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