我在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
答案 0 :(得分:1)
Active Record没有身份映射:虽然first
和second
代表数据库中的同一行,但内存对象中的两个是独立的,并且彼此不知道
my_method
中的保存将完成,然后第二次保存将覆盖这些更改。
如果你想能够发现这种事情,一种方法是optimistic locking。这允许您检测何时保存过时对象:第二次保存将引发异常。你可以通过添加一个名为lock_version
的整数列来激活你的类(确保它的默认值为0)