2012-06-01 4 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 모델의 인스턴스를 만든 다음 이 아니고이 아닌 데이터베이스에서 일치하는 레코드를 만들 수 있습니다. - 데이터베이스 레코드는 저장 또는 작성 메소드를 호출 한 경우에만 작성됩니다.