不同数据库表的ActiveRecord继承

时间:2009-04-24 20:01:49

标签: ruby-on-rails inheritance activerecord sti

我刚刚开始调查在Rails中使用更高级的模型。我经常使用的一个非常成功的模型是一个多对多交叉引用关系由一个类访问的模型,该类本身就是多对多关系中基类的子类。

这样,交叉引用类可以作为基类的替身。

一个很好的例子是导航层次结构节点(NavigationNode)与用户角色的交叉引用。在交叉引用点,类(RoleNavigationNode)可以从NavigationNode继承,并且仍然熟悉用户角色。

我的问题是(在上面的情况下)RoleNavigationNode可以从NavigationNode继承并访问交叉引用表而不是NavigationNode访问的表 - 当然这是使用ActiveRecord。

我没有研究多态关联,这可能更合适。

提前致谢...,

2 个答案:

答案 0 :(得分:2)

在子类上尝试了set_table_name

另外,请查看模型类中的@abstract_class设置。

最后,您需要的只是两个模型中包含的Mixin。

无论如何,你要做的事情听起来相当不具备ActiveRecord-ish。您可能希望发布一个更清晰的示例,说明您要实现的目标,也许我们能够提出更简单的方法。

答案 1 :(得分:2)

这适用于Rails 3:

class Common < ActiveRecord::Base
  @abstract_class = true
  def common
    "Foobar!"
  end
end

class Model < Common
end

class AnotherModel < Common
end

如果不设置abstract_class,Rails将在您的数据库中查找名为commons的表。