在Rails 3.2中使用类似的数据库定义功能相同的模型

时间:2018-04-05 15:04:53

标签: ruby ruby-on-rails-3 activerecord

我有一个带有旧架构的数据库,我将从中迁移数据。表名和关系与数据库完全相同。出于某种原因,当我为旧实例定义模型时,它们就好像它们是新数据库的模型一样。

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的实例来自正确的数据库。谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

所以,这与STI有关。有两种模型从Clip继承。如果我使用

self.inheritance_column = :_non_existing_column
在FromClip模型中

,它按预期工作。我只需要将可剪切方法指向正确的模型,并确保正确引入类型列。

def clippable
  ("From" + clippable_type).constantize.find_by_id(clippable_id)
end