ActiveRecord是否覆盖在不同时间加载的对象的更改



我在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

活动记录没有标识映射:虽然firstsecond表示数据库中的同一行,但内存中的两个对象是分开的,彼此不知道

my_method中的保存将完成,然后第二次保存将覆盖这些更改。

如果您希望能够检测到这类事情,一种方法是乐观锁定。这允许您检测何时保存过时的对象:第二次保存会引发异常。您可以在类中通过添加一个名为lock_version的整数列来激活它(确保它的默认值为0)

最新更新