2012-06-01 1 views
1

내 간단한 sqlite3를 데이터베이스가 업데이트되지 않습니다 :액티브는

CREATE TABLE balances(
balance zilch 
); 

내 루비는 다음과 같이

require('active_record') 
ActiveRecord::Base.establish_connection(:database => "testbalance.db", :adapter => "sqlite3") 
class Balance < ActiveRecord::Base 
end 
x = Balance.new 
x.balance = 50 
x.save 

나는 종료하고 다시 와서 같은 루비에 입력

다시, 처음에는 ( x.balance = 50을 실행하기 전에) 잔액은 nil입니다. 왜 이런거야? 내 DB를 저장하지 않는 이유는 무엇입니까?

+0

JFI는 레일즈 애플리케이션 또는 루비 코드 중 루비 코드가 궁금하다면 'sqlite3'이 필요합니다. – Viren

답변

2

동일한 코드를 입력하면 새 개체가 다시 생성됩니다. 잔액이 nil 일 것입니다.

개체가 저장되어 있는지 확인하려면 (예 : Balance.count) 레코드 생성 전과 후에 확인할 수 있습니다.

0

이것은 액티브 레코드를 사용하는 데모 데모로 제작시 유용하지는 않습니다. 그래도 시작할 수 있습니다. 내 코드는 sqlite3 보석없이 연결을 만들 것입니다. 나는 Active Record가 : adapter 해시 항목을 사용한다면 그것을 포함 할 것이라고 생각한다. 물론 설치가 필요하지만 액티브 레코드의 코드에는 실제로 필요하지 않습니다. 볼 필요없이 그냥 사용해보십시오. 그래도 의심 스럽다면 재미만을 위해 보석을 제거하십시오. 더 많은 액티브 레코드 네임 스페이스와 메쏘드가 있습니다. 특히 데이터베이스가 이미 있는지 확인하기 위해 시도해야합니다. 그런 다음 하나의 생성을 전달하십시오. 다음은 Metaprogramming Ruby라는 책의 샘플 코드입니다.

#--- 
# Excerpted from "Metaprogramming Ruby", 
# published by The Pragmatic Bookshelf. 
# Copyrights apply to this code. It may not be used to create training material, 
# courses, books, articles, and the like. Contact us if you are in doubt. 
# We make no guarantees that this code is fit for any purpose. 
# Visit http://www.pragmaticprogrammer.com/titles/ppmetr2 for more book information. 
#--- 

# Create a new database each time 
File.delete 'dbfile' if File.exist? 'dbfile' 

require 'active_record' 
ActiveRecord::Base.establish_connection :adapter => "sqlite3", 
            :database => "dbfile.sqlite3" 

# Initialize the database schema 
ActiveRecord::Base.connection.create_table :ducks do |t| 
    t.string :name 
end 

class Duck < ActiveRecord::Base 
    validate do 
    errors.add(:base, "Illegal duck name.") unless name[0] == 'D' 
    end 
end 

my_duck = Duck.new 
my_duck.name = "Donald" 
my_duck.valid?   # => true 
my_duck.save! 

require_relative '../test/assertions' 
assert my_duck.valid? 

bad_duck = Duck.new(:name => "Ronald") 
assert !bad_duck.valid? 

duck_from_database = Duck.first 
duck_from_database.name   # => "Donald" 

assert_equals "Donald", duck_from_database.name 

duck_from_database.delete 

File.delete 'dbfile' if File.exist? 'dbfile' 

이 코드는 사용 후에 db 파일을 삭제하며 아주 좋은 영속성도 아닙니다. 그러나 단언을 테스트하는 것만 큼 아이디어를 얻을 수 있습니다. 당신은 당신이 균형을 바꿀 때 그것을 확신 할 수 있습니다.

나머지 코드가 필요합니까? https://pragprog.com/book/ppmetr/metaprogramming-ruby

나는 너를 훈련시키고 있는가? 내가 틀린다면 사회자가 이것을 삭제하십시오. 나는 나쁜 모범을 보이고 싶지 않다.