我在创建应用程序上的新对象时遇到问题。显然,数据会在我的Sequel :: Model和db表本身之间的某处丢失,从而导致具有id和NULL的所有属性。Ruby续集SQLite3应用程序将有效对象保存到具有NULL属性的数据库中
这是我的模型:
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
这是创建它的表迁移:
Sequel.migration do
change do
create_table(:wallets) do
primary_key :id, unique: true
String :address
Integer :balance
end
end
end
我使用roda框架。这里是wallet_app.rb,其中创建钱包对象:
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
正如上述类的评论中指出的,对象是在数据库插入之前有效,这些属性将显示设置正确。尽管如此,数据仍然保留为所有属性为NULL。我假设在迁移或模型定义中出现错误,但找不到任何错误。
万一有帮助,我在这里也复制我的Gemfile:
source "https://rubygems.org"
ruby '2.1.2'
gem 'roda'
gem 'sequel'
gem 'sqlite3'
gem 'httparty'
在此先感谢
这是做到了。谢谢@Jeremy – ntonnelier