Ruby on rails 由于ActiveRecord而更新/删除错误记录;“类型”;
我有两个表Ruby on rails 由于ActiveRecord而更新/删除错误记录;“类型”;,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有两个表Foo和FooArchive,其中FooArchive是Foo的副本FooArchive用于存储Foo中的旧数据,以优化并防止第一个数据变得过大 class Foo < ActiveRecord::Base end class FooArchive < ActiveRecord::Base end 当我将记录从Foo归档到FooArchive时,它还会复制其类型。当我从FooArchive获取一条记录时,例如最后一条记录,一旦我获取该记录,如果我尝试修改它(如更新或删除
Foo
和FooArchive
,其中FooArchive
是Foo
的副本FooArchive
用于存储Foo
中的旧数据,以优化并防止第一个数据变得过大
class Foo < ActiveRecord::Base
end
class FooArchive < ActiveRecord::Base
end
当我将记录从Foo
归档到FooArchive
时,它还会复制其类型
。当我从FooArchive
获取一条记录时,例如最后一条记录,一旦我获取该记录,如果我尝试修改它(如更新或删除),它将读取类型并尝试从Foo
表而不是FooArchive
获取该记录
foo_archive = FooArchive.last
SELECT `foo_archives`.* FROM `foo_archives` ORDER BY `foo_archives`.`id` DESC LIMIT 1
foo_archive.reload
SELECT `foos`.* FROM `foos` WHERE `foos`.`type` IN ('OneFoo') AND `foos`.`id` = 35 LIMIT 1
ActiveRecord::RecordNotFound: Couldn't find OneFoo with id=35 [WHERE `foos`.`type` IN ('OneFoo')]
我有点理解为什么它试图在另一个表中查找记录,因为该类型属于该表
有没有一种方法可以让它在不修改数据/列的情况下工作,我正在考虑删除这个模型的活动记录,但还没有找到方法
在本例中,我使用:
- 轨道3.2.21
- Ruby 2.1.4
FooArchive
模型使用STI(单表继承)实例化OneFoo
对象。您应该能够通过以下方式禁用此功能:
class FooArchive < ActiveRecord::Base
self.inheritance_column = nil
class FooArchive
注:未经测试。您可能需要使用一个不存在的列而不是
nil
来实现此功能。有没有任何原因表明您在复制行时没有镜像OneFoo
和twooo
并重写type
?我对其进行了测试,它的工作原理与classfooarchive
class FooArchive < ActiveRecord::Base
self.inheritance_column = nil