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

owedおよびservedプロパティが変更されたことを DataMapper が認識しないため、リソースは保存されません。#saveリソースが DataMapper によってダーティであると見なされた場合にのみ、リソースを保存します。

代わりに、self.owedとの値を変更しますself.served。これにより、リソース内で状態が変化し、リソースがダーティとしてマークされ、#saveトリガーできるようになります。goさらに、次を使用してメソッドを簡略化できます#update

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

代わりに使用する必要がありself.owedますself.served

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