2012-06-01 26 views
0

我剛剛開始學習ActiveRecord,並且我只是嘗試一些小東西來弄清楚一切是如何工作的。我剛剛在以下sqlite3數據庫上嘗試了以下代碼。ActiveRecord刪除...?

紅寶石:

class Balances < ActiveRecord::Base 
    def initialize 
    @balance = 50 
    update_attribute(:balance, @balance) 
    end 
    def withdraw amount 
    update_attribute(:balance, @balance-amount) 
    end 
end 

SQL:

CREATE TABLE balance(
    balance 50 
); 

當我寫:

balance = Balances.new 

我得到:

NoMethodError: undefined method `delete' for nil:NilClass 
    from /Users/Solomon/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/attribute_methods/write.rb:28:in `write_attribute' 
    from /Users/Solomon/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/attribute_methods/dirty.rb:67:in `write_attribute' 
    from /Users/Solomon/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/attribute_methods/write.rb:14:in `balance=' 
    from /Users/Solomon/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/persistence.rb:180:in `update_attribute' 

這是爲什麼?難道我做錯了什麼?

回答

4

我注意到幾件事情:

  • 類名稱應該是Balance(大寫,單數)。數據庫中的表名將是小寫,複數。例如,balances
  • 請勿爲ActiveRecord模型定義initialize方法。請使用after_initialize回撥。 A post。此外,Rails docs.

新增此外,對於模型的文件名應該是balance.rb(小寫,單數)

增加了一些更你可能不希望改變的平衡每次記錄的實例初始化時,記錄回到50。 - 這就是你的例子目前正在做的。如果要將數據庫中新記錄的期初餘額設置爲50,則使用「before_create」回調。

請記住,ActiveRecord模型類與底層數據庫中的記錄相關聯但不同。例如,您可以創建一個ActiveRecord模型的實例,然後而不是在數據庫中創建匹配的記錄。 - 只有在調用save或create方法時纔會創建數據庫記錄。

相關問題