我有一个带有旧架构的数据库,我将从中迁移数据。表名和关系与数据库完全相同。出于某种原因,当我为旧实例定义模型时,它们就好像它们是新数据库的模型一样。
from_db.rb
class FromDB < ActiveRecord::Base
self.abstract_class = true
establish_connection FROM_DB
end
from_clip.rb
class FromClip < FromDB
self.table_name = "clips"
belongs_to :clippable, polymorphic: true, counter_cache: true
belongs_to :video, class_name: "FromVideo"
end
clip.rb
class Clip < ActiveRecord::Base
belongs_to :clippable, polymorphic: true, counter_cache: true
belongs_to :video
end
控制台
FromClip.first.class.name
FromClip Load (0.2ms) SELECT `clips`.* FROM `clips` LIMIT 1
=> "Clip"
FromClip可用的所有方法和关联都是Clip模型中的方法和关联,而不是FromClip模型,但FromClip的实例来自正确的数据库。谢谢你的帮助
答案 0 :(得分:0)
所以,这与STI有关。有两种模型从Clip继承。如果我使用
self.inheritance_column = :_non_existing_column
在FromClip模型中,它按预期工作。我只需要将可剪切方法指向正确的模型,并确保正确引入类型列。
def clippable
("From" + clippable_type).constantize.find_by_id(clippable_id)
end