【问题标题】:Rails polymorphic association has_manyRails 多态关联 has_many
【发布时间】:2012-11-21 03:03:04
【问题描述】:

我想创建一个运动统计网页,我可以在其中存储每个球员的不同运动统计数据。玩家可以拥有来自不同运动的统计数据。

我想这样做的方法是创建一个整体 Stat 模型,其中包含每个统计数据的基本属性,无论运动如何,例如地点、日期、对手等。这样,每项运动都会继承自 Stat 模型 - 例如 FootballStatBasketballStat

似乎使用单表继承将被证明是非常低效的,因为每项运动都有非常不同的统计数据。因此,我只找到了另外两个选项:

  • 多态关联,和
  • 多表继承。

在这种情况下,您认为哪一种会更有效?以及如何实施?


这就是我想要做的,也许你可以帮助我。谢谢!

【问题讨论】:

    标签: ruby-on-rails multiple-inheritance polymorphic-associations single-table-inheritance


    【解决方案1】:

    多态关联肯定是要走的路。您可以按如下方式实现它。

    Class Stat 
      belongs_to :sportable, 
      belongs_to :player
    end
    
    Class Sport1
      has_many :stats, :as => :sportable
      # various attributes for sport1
    end
    
    Class Sport2
      has_many :stats, :as => :sportable
      # various attributes for sport2
    end
    
    Class Player
      has_many :stats
    end
    

    【讨论】:

    • 感谢您的快速回复。这看起来比我想象的要简单得多。我不明白的唯一部分是你在哪里定义了 Sportable 类,它的功能到底是什么?谢谢
    • sportable 不是一个类,它只是一个通用名称,您可以使用它来调用一个父运动类的统计数据。例如@stat.sportable 将返回统计数据所属的特定端口类。在您迁移 stat 类时,您需要添加到字段,即 1)sportable_id 2)sportable_type。 sportable_type 包含 Stat 所属的类的名称(例如 Sport1)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多