Ich habe Probleme beim Erstellen neuer Objekte in meiner Anwendung. Offensichtlich gehen die Daten irgendwo zwischen meinem Sequel :: Model und der db-Tabelle selbst verloren, was zu Einträgen mit einer ID und allen Attributen in NULL führt.Ruby Sequel SQLite3 App speichert gültige Objekte in der Datenbank mit NULL-Attributen
Das ist mein Modell:
class Wallet < Sequel::Model(:wallets)
attr_accessor :address, :balance
def validate
super
errors.add(:address, "Address can't be empty") if address.empty?
errors.add(:address, "Input address already exists in the db") unless Wallet.where(address: address).empty?
end
end
Und das ist die Migration, die es Tabelle erstellt:
Sequel.migration do
change do
create_table(:wallets) do
primary_key :id, unique: true
String :address
Integer :balance
end
end
end
I roda Rahmen bin mit. Hier ist wallet_app.rb, wo Wallet Objekte erstellt:
require 'roda'
require 'sequel'
require 'json'
DB = Sequel.connect('sqlite://database.sqlite3')
class WalletApp < Roda
require './lib/services/balance_service'
require './models/account'
route do |r|
...
r.post "wallets" do
address = r.params["address"]
balance = BalanceService.get_balance(address)
wallet = Wallet.new(address: address, balance: balance)
# Until here we have the attributes correctly set on wallet object
if wallet.valid? && wallet.save
# Now wallet is persisted in the db with an id but address and balance NULL
wallet.to_json
else
wallet.errors.to_json
end
end
end
end
Wie oben in den Kommentaren in der Klasse ausgeführt hat, ist das Objekt gültig, bevor sie im DB Einfügen und die Attribute erscheinen richtig eingestellt ist. Die Daten bleiben jedoch erhalten, da alle Attribute NULL sind. Ich nehme einen Fehler in der Migration oder der Modelldefinition an, aber ich konnte keine finden.
Falls es hilft, kopiere ich mein Gemfile auch hier:
source "https://rubygems.org"
ruby '2.1.2'
gem 'roda'
gem 'sequel'
gem 'sqlite3'
gem 'httparty'
Vielen Dank im Voraus
das hat es getan. Danke @ Jeremy – ntonnelier