【问题标题】:ActiveRecord Inheritance with Different Database Tables具有不同数据库表的 ActiveRecord 继承
【发布时间】:2009-04-24 20:01:49
【问题描述】:

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

这样,交叉引用类可以充当基类的替代品。

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

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

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

提前谢谢...,

【问题讨论】:

    标签: ruby-on-rails inheritance activerecord sti


    【解决方案1】:

    在子类上试过set_table_name

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

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

    无论如何,您尝试做的事情听起来不太像 ActiveRecord-ish。您可能想发布一个更清晰的示例来说明您想要实现的目标,也许我们可以想出一些更简单的东西。

    【讨论】:

    • 这样回复你的帖子可能有点荒谬(四个月后)。但是谢谢...我忘记了我在哪里发布了这个问题。我最近在网上闲逛,因为这个问题又出现了。无论如何,我会调查你的 cmets - 这有点不像我意识到的那样。
    【解决方案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 的表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多