我刚开始使用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?
,一旦我弄脏物体,我必须这样做
将对象从数据库中获取新变量?答案 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