什么是脏资源?

coo*_*ool 2 ruby datamapper

我刚开始使用Datamapper.

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

u1 = User.get(1)
u1.name = "xyz" 
u1.update
Run Code Online (Sandbox Code Playgroud)

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

u1 = User.get(1)
Run Code Online (Sandbox Code Playgroud)

在那之后:

u1.update({:name => "xyz"})
Run Code Online (Sandbox Code Playgroud)

将抛出虚假并dirty?返回true.

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

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

u1.name = "xyz"
u1.save
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  • 我应该使用什么:保存还是更新?
  • 我应该说get(id)甚至改变一个领域?
  • 我应该什么时候使用update?语法是什么:user.update({ ....})user.name = "xyz"; user.update
  • 什么是dirty?,并且一旦我使对象变脏,我是否必须将对象从数据库中刷新到变量?

sol*_*nic 6

从db中获取资源然后更改其属性时,资源变为"脏".这意味着资源已加载到内存中,其状态已更改,并且更改可以在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
Run Code Online (Sandbox Code Playgroud)