在我的应用程序中,我得到了错误,因为它不能更新过时的对象。我不知道这个对象。什么时候会创建,为什么它被称为陈旧对象。我想知道。它是否仅用于ROR或其他语言中也使用,这个目的和目的是什么?
答案 0 :(得分:1)
根据文件: http://api.rubyonrails.org/classes/ActiveRecord/StaleObjectError.html
陈旧对象异常的原因是:
Record is stale when it's being saved in another query after instantiation, for example, when two users edit the same wiki page and one starts editing and saves the page before the other.
解决方案:要避免此异常,请使用锁定系统: http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.html
答案 1 :(得分:0)
在我的应用程序中,多个线程能够编辑相同的工作 - >版本 - >元素记录。检测错误并提出合适的错误。
我通常会处理错误:
我打印了一条flash消息,例如“抱歉,请尝试一段时间之后,别人编辑此工作版本元素”。
element.lock_version = Document::Element.find(element.id).lock_version
element.save!
例如,检测到一个编辑改变了元素的类型,另一个编辑改变了元素的名称,不同的创建者,然后两个记录的代码应该合并在一个保存中。
通常,我习惯使用element.reload来获取元素的新版本。
工作得很好!!