什么是脏资源?

时间:2011-12-29 17:58:52

标签: ruby datamapper

我刚开始使用Datamapper。

我正在尝试update一个对象。我使用它的id获取对象/模型:

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

抛出错误/引发异常。我再试一次:

u1 = User.get(1)

之后:

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

将抛出false并dirty?返回true

之后,对update的任何调用都会失败,说它很脏。

我可以通过以下方式进行保存:

u1.name = "xyz"
u1.save

以下是我的问题:

  • 我应该使用什么:保存还是更新?
  • 我应该说get(id)甚至只改变一个字段吗?
  • 我应该何时使用update?语法是什么:user.update({ ....})user.name = "xyz"; user.update
  • 什么是dirty?,一旦我弄脏物体,我必须这样做 将对象从数据库中获取新变量?

1 个答案:

答案 0 :(得分:6)

当您从数据库中获取资源然后更改其属性时,资源变为“脏”。这意味着资源已加载到内存中,其状态已更改,并且更改可以保留在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