2012-04-06 52 views
1

這裏的模型:爲什麼這個datamapper對象不會保存?

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 

不更新數據庫。有任何想法嗎?

回答

3

您需要使用self.owedself.served代替:

def go 
    self.owed -= 1 
    self.served += 1 
    save 
end 
4

資源不節約,因爲DataMapper的不知道owedserved性質已經改變。 #save只會保存資源,如果資源被DataMapper認爲是髒的。

取而代之,請更改self.owedself.served的值,這會導致資源內部發生狀態更改,這會將資源標記爲髒,並允許#save觸發。另外,您可以使用#update簡化go方法:

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