我写了一个应用程序,我计划通过DataMapper和sqlite3保存用户数据,并使用GDBM保存库存项目(其中几个)。当我用irb运行它时,User.new和库存方法工作正常,但是DataMapper说我的用户模型无效并且不保存。我之前使用过DataMapper并且从未遇到过这样的错误,实际上我使用了相同的用户模型(使用密码salt和hash)而没有sinatra-datamapper app中的任何错误。
要清楚,我打算将用户名和“gdbm数据库文件的路径”保存为datamapper中的字符串。 gdbm创建自己的db文件,所有方法都可以正常工作而不会抱怨并且所有数据都是持久的。由于我不是想保存gdbm对象而只是在datamapper中保存一个字符串,我认为应该没有验证问题。
DataMapper::Model.raise_on_save_failure = true
未提供错误的具体说明,但save!
方法会出现以下错误:
DataObjects::IntegrityError: users.name may not be NULL (code: 19, sql state: , query: INSERT INTO "users" DEFAULT VALUES, uri: sqlite3:/home/barerd/game_inventory/users.db?scheme=sqlite3&user=......
但是当我在irb。中检查时,name属性不为空。
也许错误源自sqlite但我不知道测试它。有人可以指导我如何检查此错误吗?
require 'gdbm'
require 'data_mapper'
require 'dm-validations'
DataMapper.setup :default, 'sqlite://' + Dir.pwd + '/users.db'
class User
attr_reader :name, :inventory_db
include DataMapper::Resource
property id, Serial
property :name, String, :required => true, :unique => true, :messages => { :presence =>...... etc }
property :inventory_db, String
def initialize name
@name = name
@inventory_db = Dir.pwd + '/#{name}_inventory.db'
end
def inventory
GDBM.new @inventory_db, 0644, GDBM::WRCREAT
end
..several methods related to inventory..
end
DataMapper.finalize.auto_migrate!
答案 0 :(得分:0)