以下是模型:
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
似乎没有更新数据库。有什么想法吗?
答案 0 :(得分:4)
资源未保存,因为DataMapper不知道owed
和served
属性已更改。如果资源被DataMapper视为脏,则#save
将仅保存资源。
相反,更改self.owed
和self.served
的值,这将导致资源中的状态更改,这会将资源标记为脏并允许#save
触发。此外,您可以使用go
简化#update
方法:
def go
update(:owed => self.owed - 1, :served => self.served + 1)
end
答案 1 :(得分:3)
您需要使用self.owed
和self.served
代替:
def go
self.owed -= 1
self.served += 1
save
end