2012-12-09 101 views
0

這是我第一次在非rails應用程序中使用ActiveRecord,並且遇到了問題。 ActiveRecord能夠找出我在sqlite3數據庫中的列,但由於某些原因,它無法找出默認的列值。ActiveRecord顯示錯誤的列默認值

以下是有關表格的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帳戶表,這是我所得到的:

[10] pry(main)> Account.column_defaults 
=> {"id"=>0, 
"username"=>nil, 
"password_hash"=>nil, 
"creation_time"=>0, 
"expiration_time"=>0} 

我用的ActiveRecord之前工作了Rails應用程序,它是足夠聰明到找出默認值。出於某種原因,它現在無法弄清楚它們。

難道我做錯了什麼嗎?我讀到我可以用default :id => bla手動指定默認值,但不應該ActiveRecord能夠找出默認值?


更新:我想我找到了一個解決方法。由Account.column_defaults返回的散列是可寫的,並且更改這些元素似乎工作正常。

回答

1

試着這樣做:

class Account < ActiveRecord::Base 
    after_initialize :default_values 

    private 
    def default_values 
     self.username ||= "default value" 
     #etc... 
    end 
end 
+0

由於'id'列'autoincrement',有沒有什麼辦法讓該數據庫將使用下一個ID?通常情況下,它會繼續增加id,所以如果最後一個項目的id爲12,並且您刪除了它,則下一個項目的id將爲13. –

+0

不,該值插入到數據庫後會返回到ActiveRecord。 –