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

时间:2014-09-06 00:01:40

标签: ruby activerecord

我在Ruby WITHOUT Rails中使用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

1 个答案:

答案 0 :(得分:1)

Active Record没有身份映射:虽然firstsecond代表数据库中的同一行,但内存对象中的两个是独立的,并且彼此不知道

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

如果你想能够发现这种事情,一种方法是optimistic locking。这允许您检测何时保存过时对象:第二次保存将引发异常。你可以通过添加一个名为lock_version的整数列来激活你的类(确保它的默认值为0)