为什么datamapper方法不起作用?

时间:2017-03-01 17:56:55

标签: ruby datamapper

由于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

1 个答案:

答案 0 :(得分:0)

new_consultation.save检查您的对象在保存之前是否有效。如果对象有效,它将保存并返回true;否则,它将不会保存并返回`false。

您的对象看起来无效,因为您已指定:

property :refund, Text, required: true 

如果需要退款,您需要指定它或您的对象不会保存。

请注意puts new_consultation.date有效,因为date仍然存储在本地对象中,即使save失败并且没有数据保存到数据库中。