我有2个表Foo
和FooArchive
,其中FooArchive
是Foo
的副本。 FooArchive
用于存储来自Foo
的旧数据,以便优化并保持第一个不会变得过大。
class Foo < ActiveRecord::Base
end
class FooArchive < ActiveRecord::Base
end
Foo
是子类:
class OneFoo < Foo
end
class TwoFoo < Foo
end
当我将记录从Foo
归档到FooArchive
时,它还会复制其type
。当我从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')]
我理解为什么它试图在另一个表中找到记录,因为该类型属于该表。
有没有办法让它在不修改数据/列的情况下工作,我正在考虑摆脱这个模型的活动记录,但还没有找到方法。
在这种情况下,我正在使用:
答案 0 :(得分:2)
Rails假定您的FooArchive
模型正在使用STI(单表继承)来实例化OneFoo
个对象。您应该可以通过以下方式禁用此功能:
class FooArchive < ActiveRecord::Base
self.inheritance_column = nil
注意:未经测试。您可能需要使用不存在的列而不是nil
才能使其正常工作。