我在RubyWITHRails中使用ActiveRecord。如果我使用以下代码,第一次对属性的更改会覆盖第二次对属性所做的更改吗。第一名和第二名都是同一记录。
def my_method
first = MyClass.find(1)
first.my_attribute = "I am an attribute"
first.save
end
second = MyClass.find(1)
second.my_attribute = "this is my attribute"
my_method
second.save
活动记录没有标识映射:虽然first
和second
表示数据库中的同一行,但内存中的两个对象是分开的,彼此不知道
my_method
中的保存将完成,然后第二次保存将覆盖这些更改。
如果您希望能够检测到这类事情,一种方法是乐观锁定。这允许您检测何时保存过时的对象:第二次保存会引发异常。您可以在类中通过添加一个名为lock_version
的整数列来激活它(确保它的默认值为0)