1

这是模型:

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

它似乎没有更新数据库。有任何想法吗?

4

2 回答 2

4

资源未保存,因为 DataMapper 不知道owedandserved属性已更改。#save如果 DataMapper 认为资源是脏的,则只会保存资源。

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

def go
  update(:owed => self.owed - 1, :served => self.served + 1)
end
于 2012-04-06T05:31:21.137 回答
3

您需要使用self.owedandself.served来代替:

def go
  self.owed -= 1
  self.served += 1
  save
end
于 2012-04-06T05:20:41.080 回答