2011-12-29 1072 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