2012-06-01 2 views
1

Моих простой базы данных Sqlite3 выглядит следующим образом:ActiveRecord не обновит

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. Почему это? Почему не сохраняется моя БД?

+0

JFI - это код приложения для рельсов или рубин, просто интересно, если он рубин, где требуется «sqlite3», он может его увидеть – Viren

ответ

2

Если вы вводите тот же код, вы снова создаете новый объект. Неудивительно, что его баланс равен nil.

Чтобы проверить, что ваш объект сохранен, вы можете (например) проверить Balance.count до и после создания записи.

0

Это старый демонстрационный способ использования Active Record и не очень полезный для производства. Это поможет вам начать. Мой код будет создавать соединения без необходимости использования sqlite3. Я думаю, что Active Record будет включать его, если вы используете запись хэша адаптера:. Конечно, вам нужно, чтобы он был установлен, но он не нужен в вашем коде для Active Record. Просто попробуйте, чтобы этого не требовалось. Тогда, если вы все еще сомневаетесь, удалите жемчужину просто для удовольствия. Есть больше пространств имен и меток Active Record, которые вы должны попробовать, особенно тех, которые проверяют, существует ли база данных. Затем пропустите создание одного. Вот пример кода из книги Метапрограммирование Рубина.

#--- 
# 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

Я обучаю вас или я подобен? Модераторы удаляют это, если я ошибаюсь здесь, пожалуйста. Я не хочу приводить плохой пример.

Смежные вопросы