为什么这个datamapper对象不会保存?

时间:2012-04-06 03:54:26

标签: ruby-on-rails ruby sinatra datamapper

以下是模型:

class Target
  include DataMapper::Resource

  property :id, Serial
  property :owed, Integer, :default => 0, :required => true
  property :served, Integer, :default => 0, :required => true

  def go
    @owed -= 1
    @served += 1
    save
  end
end

当我这样做时:

t = Target.first
t.go

似乎没有更新数据库。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

资源未保存,因为DataMapper不知道owedserved属性已更改。如果资源被DataMapper视为脏,则#save将仅保存资源。

相反,更改self.owedself.served的值,这将导致资源中的状态更改,这会将资源标记为脏并允许#save触发。此外,您可以使用go简化#update方法:

def go
  update(:owed => self.owed - 1, :served => self.served + 1)
end

答案 1 :(得分:3)

您需要使用self.owedself.served代替:

def go
  self.owed -= 1
  self.served += 1
  save
end