由于Datamapper,我试图访问我现有的数据。
但它不起作用。 .first
,.all
等所有方法都不会返回任何内容。 .update
返回undefined method update for nil:NilClass (NoMethodError)
...
我确定数据库不为空,因为此代码很好地返回new_consultation.date
new_consultation = Consultation.new
new_consultation.name = name_prestation
new_consultation.expense = expense_prestation
new_consultation.date = date_prestation.empty? ? Time.now.strftime("%d/%m/%Y") : date_prestation
new_consultation.save
puts new_consultation
puts new_consultation.date
这是整个代码:
DataMapper.setup(:default, 'sqlite:medical_expenses.db')
class Consultation
include DataMapper::Resource
property :id, Serial
property :name, Text, required: true
property :expense, Text, required: true
property :date, Text, required: true
property :refund, Text, required: true
end
DataMapper.finalize()
DataMapper.auto_upgrade!()
# Enter and save new consultation
puts 'Prestations ?'
name_prestation = gets.chomp
puts 'Montant ?'
expense_prestation = gets.chomp
puts 'Date ? (par défaut date du jour)'
date_prestation = gets.chomp
print "Dépense enregistrée"
new_consultation = Consultation.new
new_consultation.name = name_prestation
new_consultation.expense = expense_prestation
new_consultation.date = date_prestation.empty? ? Time.now.strftime("%d/%m/%Y") : date_prestation
new_consultation.save
puts new_consultation
puts new_consultation.date
Consultation.first.update(refund: 'none')
puts Consultation.first
答案 0 :(得分:0)
new_consultation.save
检查您的对象在保存之前是否有效。如果对象有效,它将保存并返回true
;否则,它将不会保存并返回`false。
您的对象看起来无效,因为您已指定:
property :refund, Text, required: true
如果需要退款,您需要指定它或您的对象不会保存。
请注意puts new_consultation.date
有效,因为date
仍然存储在本地对象中,即使save
失败并且没有数据保存到数据库中。