模型如下:
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不知道owed
和served
属性已更改#save
仅当DataMapper认为资源脏时才会保存该资源。
相反,请更改self.owed
和self.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/