模型如下:

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

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

最佳答案

资源未保存,因为DataMapper不知道owedserved属性已更改#save仅当DataMapper认为资源脏时才会保存该资源。
相反,请更改self.owedself.served的值,这将导致资源内的状态更改,从而将资源标记为脏并允许触发#save此外,您可以使用go简化#update方法:

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

关于ruby-on-rails - 为什么这个datamapper对象不保存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10038942/

10-13 04:51