2011-12-29 616 views
2

我剛開始使用Datamapper。什麼是髒資源?

我想要update一個對象。我使用它的ID獲取對象/模型:

u1 = User.get(1) 
u1.name = "xyz" 
u1.update 

它引發錯誤/引發異常。我再次嘗試:

u1 = User.get(1) 

,之後:

u1.update({:name => "xyz"}) 

將拋出虛假和dirty?回報true

之後,任何呼叫update將失敗,說它很髒。

我可以做一個通過節省:

u1.name = "xyz" 
u1.save 

這裏是我的問題:

  • 我應該怎麼使用:保存或更新?
  • 我應該說get(id)甚至只是改變一個領域?
  • 什麼時候應該使用update?語法是什麼:user.update({ ....})user.name = "xyz"; user.update
  • dirty?什麼是dirty?,它是一次我做一個對象髒,我必須 獲取從數據庫新鮮的對象變量?
+3

哦,「什麼是髒資源」可能會出錯。 – 2011-12-29 22:54:52

回答

5

當您從數據庫中獲取資源,然後更改其屬性,然後資源變得'髒'。這意味着資源被加載到內存中,並且其狀態已更改,並且更改可以在db中保留。

使用#save可以保持對已加載資源所做的更改,並且您希望在不將資源狀態更改爲「髒」的情況下立即保留更改時使用#update。以下是一個示例會話:

User.create(:name => 'Ted') 

# update user via #save 
user = User.get(1) 
user.name = 'John' 
user.dirty? # => true 
user.save 

# update user via #update 
user = User.get(1) 
user.update(:name => 'John') 
user.dirty? # => false