構成の一部を、作成したテスト アプリのデータベースに移動する過程で、非常に奇妙な問題に遭遇しました。テーブルに新しいレコードを作成しようとすると、エラーが発生します。このエラーは、ID 列 (モデルの DataMapper Serial) が null であるために SQL クエリが失敗したことを示しています。このテーブルのスキーマと、新しい行を作成するために使用されているコードは、私が行った変更では変更されていません。
sinatra.error
#<DataObjects::IntegrityError: transactions.id may not be NULL (code: 19, sql state: , query: INSERT INTO "transactions" ("uuid", "oid", "store", "txndatetime", "chargetotal") VALUES ('...', '', '...', '...', '...')
行を作成する ruby ステートメント:
txn = Transaction.create(:uuid => @uuid, :txndatetime => @timestr, :store => store, :chargetotal => params[:subtotal], :oid => params[:oid])
テーブルのモデル:
class Transaction
include DataMapper::Resource
property :id, Serial
property :uuid, String, :key => true
property :oid, String
property :store, String
property :txndatetime, String
property :status, String
property :refnumber, String
property :chargetotal, String
property :response_hash, String, :length => 255
property :approval_code, String
property :tdate, String
validates_presence_of :uuid, :store
validates_uniqueness_of :uuid
end